Slide 1

Slide 1 text

02 ¿Qué es la 
 programación funcional?

Slide 2

Slide 2 text

¿Qué es la programación funcional? Historia La programación funcional se basa en la construcción de programas utilizando funciones puras, sin efectos secundarios.

Slide 3

Slide 3 text

¿Qué es la programación funcional? Historia Para entender el presente de la programación funcional demos un vistazo al pasado…

Slide 4

Slide 4 text

¿Qué es la programación funcional? Historia Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem Entscheidungsproblem ntscheidungsproblem

Slide 5

Slide 5 text

¿Entscheidungsproblem?

Slide 6

Slide 6 text

¿Qué es la programación funcional? Historia David Hilbert 1862 - 1943 En 1928 planteó el Entscheidungsproblem (problema de decisión), buscaba un procedimiento capaz de determinar si S era un teorema, donde S es una proposición de lógica de primer orden (ej. ∀x∃y x = y + y).

Slide 7

Slide 7 text

¿Qué es la programación funcional? Historia Alonzo Church 1903 - 1995 Diseñó un sistema formal llamado calculo lambda el cual utilizó para demostrar que el problema de decisión (Entscheidungsproblem) era irresoluble. Propuso la definición de calculabilidad efectiva de como cualquier función que sea “λ-definible”, dicho en otras palabras, que pueda ser programada en el calculo lambda, el día de hoy conocemos esa conjetura como la tesis de Church.

Slide 8

Slide 8 text

¿Qué es la programación funcional? Historia

Slide 9

Slide 9 text

¿Qué es la programación funcional? Historia Un primer vistazo a Lambda Calculus… 0 = λs.λx.x 1 = λs.λx.s x 2 = λs.λx.s(s x) 3 = λs.λx.s(s(s x))

Slide 10

Slide 10 text

¿Qué es la programación funcional? Historia Alan Turing 1912 - 1954 Diseñó una máquina hipotética (la que hoy conocemos como maquina de Turing) capaz de resolver cualquier función computable. Utilizó la maquina para demostrar que el problema de decisión (Entscheidungsproblem) era irresoluble. Llega a la conjetura que cualquier función computable es calculable por una máquina de Turing, el día de hoy conocemos esa conjetura como la tesis de Turing.

Slide 11

Slide 11 text

¿Qué es la programación funcional? Historia

Slide 12

Slide 12 text

¿Qué es la programación funcional? Historia Un primer vistazo a la máquina de Turing… http://www.aturingmachine.com

Slide 13

Slide 13 text

¿Qué es la programación funcional? Historia Alonzo Church y Alan Turing llegaron al mismo resultado pero de diferentes formas. Ya que ambas tesis, la de Turing y Church demuestran lo mismo, nos referimos a ellas como la tesis Church-Turing.

Slide 14

Slide 14 text

¿Qué es la programación funcional? Historia Ahora que conocemos más sobre el origen, veamos con mas detalle el calculo lambda.

Slide 15

Slide 15 text

¿Qué es la programación funcional? Lambda Calculus En lambda calculus las funciones son anónimas, se utiliza el símbolo lambda para definirlas y solo reciben un valor de entrada. f(x) = x - y sería equivalente a λx.x - y f(x,y) = x - y sería equivalente a λx.λy.x - y

Slide 16

Slide 16 text

¿Qué es la programación funcional? Lambda Calculus El concepto central en Lambda Calculus es la “expresión”. := | | := λ . := abstracción := λx.x aplicación := (λx.x)y expresión := (λx.x)((λx.x)y)

Slide 17

Slide 17 text

¿Qué es la programación funcional? Lambda Calculus Variables ligadas y variables libres. λx.xy En la función anterior decimos que la variable x es ligada porque está definida luego del símbolo lambda y es utilizada en el cuerpo de la función (en el mismo contexto). La variable y es libre porque no se encuentra en el contexto local de la expresión

Slide 18

Slide 18 text

¿Qué es la programación funcional? Lambda Calculus Sustitución

Slide 19

Slide 19 text

¿Qué es la programación funcional? Lambda Calculus Sustitución [(uv)/x] (λy.x(λw.vwx)) => λy.uv(λw.vw(uv)) [(λy.xy)/x] (λy.x(λx.x)) => λy.(λy.xy)(λx.x) [3/x](λx.(λy.x + y))3 => (λy.3 + y) //No termina… (λx. x x) (λx. x x) 㱺 (λx. x x) (λx. x x) 㱺 (λx. x x) (λx. x x)

Slide 20

Slide 20 text

¿Qué es la programación funcional? Lambda Calculus Booleanos true := λx. λy.x false := λx. λy.y Aritmetica suma := λm.λn.λf.λx. m f ( n f x) succ := λn.λf.λx.f (n f x)

Slide 21

Slide 21 text

¿Qué es la programación funcional? Lambda Calculus Números 0 := λf . λx . x 1 := λf . λx . f x 2 := λf . λx . f (f x) 3 := λf . λx . f (f (f x))

Slide 22

Slide 22 text

¿Qué es la programación funcional? Lambda Calculus Linea de tiempo de 
 los lenguajes funcionales

Slide 23

Slide 23 text

¿Qué es la programación funcional? Historia John McCarthy 1927 - 2011 LISP (1960) Inventado por

Slide 24

Slide 24 text

¿Qué es la programación funcional? Historia Peter Landin 1930 - 2009 ISWIM (1966) Inventado por

Slide 25

Slide 25 text

¿Qué es la programación funcional? Historia Robin Milner 1934 - 2010 ML (1973) Inventado por

Slide 26

Slide 26 text

¿Qué es la programación funcional? Historia Jhon Backus 1924 - 2007 FP (1977) Inventado por

Slide 27

Slide 27 text

¿Qué es la programación funcional? Historia David Turner 1946 - 2005 Miranda (1985) Inventado por

Slide 28

Slide 28 text

¿Qué es la programación funcional? Historia Joe Armstrong Erlang (1986) Inventado por

Slide 29

Slide 29 text

¿Qué es la programación funcional? Historia Comité internacional (Yale y Glasgow) Haskell (1990) Inventado por

Slide 30

Slide 30 text

¿Qué es la programación funcional? Historia Martin Odersky Scala (2004) Inventado por

Slide 31

Slide 31 text

¿Qué es la programación funcional? Historia Microsoft F# (2005) Inventado por

Slide 32

Slide 32 text

¿Qué es la programación funcional? Historia Rich Hickey Clojure (2007) Inventado por

Slide 33

Slide 33 text

¿Qué es la programación funcional? Lambda Calculus Entonces ¿Qué tiene que ver esto conmigo…? Más de lo que imaginas.

Slide 34

Slide 34 text

¿Qué es la programación funcional? Ejemplos en lenguajes Javascript

Slide 35

Slide 35 text

¿Qué es la programación funcional? Lambda Calculus Python

Slide 36

Slide 36 text

¿Qué es la programación funcional? Lambda Calculus Swift

Slide 37

Slide 37 text

¿Qué es la programación funcional? Lambda Calculus Java

Slide 38

Slide 38 text

¿Qué es la programación funcional? Lambda Calculus C# (LINQ)

Slide 39

Slide 39 text

¿Qué es la programación funcional? Definiciones En la programación orientada a objetos el razonamiento sobre el código se vuelve complejo rápidamente. En la programación funcional podemos escribir programas con menos código, mas expresivos, obtener buen performance y razonar fácilmente sobre lo que está escrito. Motivación

Slide 40

Slide 40 text

¿Qué es la programación funcional? Definiciones Ahora que sabemos que no somos tan extraños a la programación funcional veamos algunas definiciones.

Slide 41

Slide 41 text

¿Qué es la programación funcional? Definiciones Transparencia referencial Decimos que una expresión es transparentemente referencial si podemos reemplazar el valor de todas sus ocurrencias en el programa sin alterar el funcionamiento del mismo. Scala

Slide 42

Slide 42 text

¿Qué es la programación funcional? Definiciones Valores inmutables La modificación de los valores no existe, una vez creado ese valor no podrá mutar, lo que podemos hacer es crear nuevos valores a partir de los creados inicialmente.

Slide 43

Slide 43 text

¿Qué es la programación funcional? Definiciones Funciones de orden superior Este tipo de funciones toman otras funciones como parámetros o retornan otras funciones como resultados.

Slide 44

Slide 44 text

¿Qué es la programación funcional? Definiciones Evaluación perezosa La evaluación perezosa computa un valor solamente cuando este es utilizado.

Slide 45

Slide 45 text

¿Qué es la programación funcional? Historias Ahora que sabemos que los valores son inmutables ¿Por qué no lo usamos para eliminar las condiciones de carrera? Veamos algunos casos importantes sobre este tema puntual…

Slide 46

Slide 46 text

¿Qué es la programación funcional? Historias Therac-25 Therac-25 fue una maquina de radio terapia que al contar con una falla de software causó la muerte de 3 pacientes y otros quedaron con daños por sobredosis de radiación. El diagnostico: Se determinó que el mal funcionamiento del programa era ocasionado por una condición de carrera, relacionada con el desbordamiento de una variable contadora. Wikipedia

Slide 47

Slide 47 text

¿Qué es la programación funcional? Historias Apagón del noreste del 2003 Se produjo un apagón que afectó buena parte de Estados Unidos y parte de Canadá. El diagnostico: Un bug en el software en el sistema de alarma en el cuarto de control. La falla en la alarma dejo a los trabajadores inadvertidos del problema, el bug fue una condición de carrera que puso la alarma en un bucle infinito. Wikipedia

Slide 48

Slide 48 text

¿Qué es la programación funcional? Historias Podemos utilizar programación funcional para cambiar el manejo de hilos con datos mutables y usar la naturaleza de la programación funcional para trabajar con datos inmutables.

Slide 49

Slide 49 text

Creo que ahora si estamos avanzando…

Slide 50

Slide 50 text

¿Qué es la programación funcional? Un cambio en la forma de resolver Podemos cambiar nuestra forma de pensar basada en instrucciones de forma imperativa por instrucciones en forma declarativa.

Slide 51

Slide 51 text

¿Qué es la programación funcional? Un cambio en la forma de escribir programas Que tal si en vez de: Simplemente hacemos:

Slide 52

Slide 52 text

¿Qué es la programación funcional? Un cambio en la forma de escribir programas Que tal si en vez de: Simplemente hacemos:

Slide 53

Slide 53 text

¿Qué es la programación funcional? Un cambio en la forma de resolver Veamos algunos ejemplos de programación funcional

Slide 54

Slide 54 text

¿Qué es la programación funcional? Ejemplos de programación funcional

Slide 55

Slide 55 text

¿Qué es la programación funcional? Herramientas Un conjunto de herramientas para el desarrollo de aplicaciones reactivas.

Slide 56

Slide 56 text

¿Qué es la programación funcional? Un cambio en la forma de resolver Temas de interés: Lambda Calculi de Alonzo Church https://www.amazon.com/Introduction-Mathematical-Logic-Alonzo-Church/dp/0691029067 An Unsolvable Problem of Elementary Number Theory http://www.jstor.org/stable/2371045 A note on the Entscheidungsproblem http://www.jstor.org/stable/2269326 Computable Numbers with an application to the Entscheidungsproblem https://www.cs.virginia.edu/~robins/Turing_Paper_1936.pdf

Slide 57

Slide 57 text

¿Qué es la programación funcional? Un cambio en la forma de resolver Temas de interés: Learn Haskell http://learnyouahaskell.com/ Whatsapp utiliza Erlang http://www.wired.com/2015/09/whatsapp-serves-900-million-users-50-engineers/ Coursera está desarrollado en Scala http://www.typesafe.com/resources/case-studies-and-stories/making-online-education-accessible-with- typesafe Twitter migró de Ruby a Scala http://www.typesafe.com/resources/case-studies-and-stories/new-tweets-per-second-record-and-how

Slide 58

Slide 58 text

¿Qué es la programación funcional? Un cambio en la forma de resolver Temas de interés: FunctionalWorks (jobs) https://jobs.functionalworks.com/ Why Spark is made with Scala https://www.quora.com/Why-is-Apache-Spark-implemented-in-Scala Manifiesto reactivo www.reactivemanifesto.org/es

Slide 59

Slide 59 text

Gracias [email protected] http://blog.evolbit.net @mordonez_me https://www.facebook.com/groups/scalaperu/