Programación
funcional con
λ
Programación funcional
Definición
La programación funcional es un paradigma de programación declarativa
basado en el uso de funciones puras, sin efectos secundarios.
¿funciones puras?
¿efectos secundarios?
En términos simples…
Utilizar funciones que lo único que hacen es procesar los datos
de entrada y retornar el resultado.
Siempre que la entrada sea la misma, el resultado también lo
será.
Programación funcional
Historia
¿Donde empieza la idea de utilizar las
funciones de esa forma?
Demos un vistazo al pasado…
Programación funcional
Historia
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
Entscheidungsproblem
ntscheidungsproblem
Programación funcional
Historia
¿Entscheidungsproblem?
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).
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 a 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.
Programación funcional
Historia
Programación funcional
Historia
¿De qué se trata el cálculo lambda?
Programación funcional
Historia
En el cálculo lambda, las funciones son anónimas, se utiliza el símbolo
lambda para definirlas y solo reciben un valor de entrada.
f(x) = x * x sería equivalente a λx.x*x
f(x,y) = x - y sería equivalente a λx.λy.x - y
Programación funcional
Lambda Calculus
El concepto central en cálculo lambda es la “expresión”.
<expresión> := <variable> | <abstracción> | <aplicación>
<abstracción> := λ <variable>.<expresión>
<aplicación> := <expresión><expresión>
abstracción := λx.x
aplicación := (λx.x)y
expresión := (λx.x)((λx.x)y)
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
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)
//No termina…
(λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x)
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)
Números
0 := λf . λx . x
1 := λf . λx . f x
2 := λf . λx . f (f x)
3 := λf . λx . f (f (f x))
Programación funcional
Lambda Calculus
Linea de tiempo de 

los lenguajes funcionales
Programación funcional
Historia
Clojure (2007)
F# (2005)
Scala (2004)
Haskell (1990)
Erlang (1986)
Miranda (1985)
FP (1977)
ML (1973)
ISWIM (1966)
LISP (1960)
Rich HickeyMartin OderskyJoe ArmstrongJhon BackusPeter Landin
MicrosoftComité internacional
(Yale y Glasgow)
David TurnerRobert MilnerJohn McCarthy
Programación funcional
Historia
Programación funcional
¿Porqué ahora?
¿Porqué hoy en día los lenguajes están incluyendo
características funcionales?
• En ciencias de la computación, las buenas ideas suelen tomarse muchos
años después. Simula 67 (1967) fue el primer lenguaje orientado a objetos
pero solo con la aparición de c++ (1983) OOP se volvió popular.
• Con el paso de los años los problemas se han vuelto más complejos y
resolverlos implica ejecutar tareas en paralelo (hilos) y/o de forma distribuida
(cloud). La programación funcional elimina el problema de sincronización de
estado.
• Al trabajar con funciones puras y eliminar los efectos secundarios, los
programas tienden a ser más confiables y más fáciles de testear.
Programación funcional
¿Porqué ahora?
Lo más importante de programar funcionalmente no es el
lenguaje ni la sintaxis sino el cambio de pensamiento.
Programación funcional
Cambio de pensamiento
Imperativo Declarativo
Programación funcional
Cambio de pensamiento
Imperativo Declarativo
Programación funcional
Cambio de pensamiento
Ahora que sabemos que lo que importa es el cambio de
pensamiento, veamos algunas definiciones.
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.
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.
Programación funcional
Definiciones
Valores inmutables
No se modifican las estructuras, por ejemplo una nueva propiedad en un objeto o un
nuevo elemento en un array usando push. Siempre debemos crear nuevos objetos.
Programación funcional
Definiciones
Valores inmutables
Lo mismo sucede con las nuevas estructuras de ES6
Programación funcional
Definiciones
Funciones de orden superior
Este tipo de funciones toman otras funciones como parámetros o retornan otras
funciones como resultados.
Programación funcional
Definiciones
Composición de funciones
Podemos componer funciones para obtener una sola función (no incluído en js por
defecto).
Programación funcional
Definiciones
js Ramda
Recursividad
Las iteraciones se realizan utilizando funciones recursivas.
Programación funcional
Definiciones
Versión con optimización por
cola (PTC)
https://github.com/tc39/proposal-ptc-syntax
Muchos han estado usando la programación funcional sin
siquiera saberlo…
Programación funcional
Ejemplos en lenguajes
Javascript
Programación funcional
Ejemplos en lenguajes
Python
Programación funcional
Ejemplos en lenguajes
Swift
Programación funcional
Ejemplos en lenguajes
Java
Programación funcional
Ejemplos en lenguajes
C# (LINQ)
Programación funcional
Ejemplos en lenguajes
A lo largo de la historia, el uso de variables e hilos no ha
funcionado muy bien, veamos algunos ejemplos…
Programación funcional
Historias de la programación imperativa
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
Programación funcional
Historias de la programación imperativa
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
Programación funcional
Historias de la programación imperativa
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.
Programación funcional
Historias de la programación imperativa
Creo que ahora si estamos avanzando…
Lo que hemos visto hasta ahora es solo la punta del iceberg,
podemos utilizar algunas librerías para potenciar la
programación funcional en Javascript.
Programación funcional
Librerías
+ FP
https://github.com/lodash/lodash/wiki/FP-Guide
Programación funcional
Librerías
O también podemos usar lenguajes funcionales que
compilan a Javascript…
Programación funcional
Librerías
Programación funcional
Librerías
Demos un vistazo a Scala.js.
Programación funcional
Scala.js
• Eliminación de errores de tipos
• Código compartido entre cliente/servidor
• Interoperabilidad con Javascript
• Reversa de urls con chequeo de errores
• Optimización y compresión de código
• Parámetros call by name
• Valores opcionales (undefined)
• Valores inmutables (reales)
• Pattern Matching
• Estructuras de datos adicionales (tuplas,
listas, entre otros)
• For Comprehensions and guards (https://
docs.scala-lang.org/tour/for-
comprehensions.html)
• Funciones parcialmente aplicadas
Programación funcional
Scala.js
Ventajas de Scala.js
Programación funcional
Scala.js
Equivalencias js a Scala.js
https://www.scala-js.org/doc/sjs-for-js/es6-to-scala-part1.html
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
Programación funcional
Enlaces
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
Programación funcional
Enlaces
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
Programación funcional
Enlaces
Gracias
marco@evolbit.net
http://blog.evolbit.net
@mordonez_me
https://www.facebook.com/groups/scalaperu/

Programación funcional Core Upgrade Febrero 2018 (ejemplos con Javascript)

  • 1.
  • 2.
    Programación funcional Definición La programaciónfuncional es un paradigma de programación declarativa basado en el uso de funciones puras, sin efectos secundarios.
  • 3.
  • 4.
    En términos simples… Utilizarfunciones que lo único que hacen es procesar los datos de entrada y retornar el resultado. Siempre que la entrada sea la misma, el resultado también lo será. Programación funcional Historia
  • 5.
    ¿Donde empieza laidea de utilizar las funciones de esa forma? Demos un vistazo al pasado… Programación funcional Historia
  • 6.
  • 7.
  • 8.
    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). Programación funcional Historia
  • 9.
    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 a 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. Programación funcional Historia
  • 10.
  • 11.
    ¿De qué setrata el cálculo lambda? Programación funcional Historia
  • 12.
    En el cálculolambda, las funciones son anónimas, se utiliza el símbolo lambda para definirlas y solo reciben un valor de entrada. f(x) = x * x sería equivalente a λx.x*x f(x,y) = x - y sería equivalente a λx.λy.x - y Programación funcional Lambda Calculus
  • 13.
    El concepto centralen cálculo lambda es la “expresión”. <expresión> := <variable> | <abstracción> | <aplicación> <abstracción> := λ <variable>.<expresión> <aplicación> := <expresión><expresión> abstracción := λx.x aplicación := (λx.x)y expresión := (λx.x)((λx.x)y) Programación funcional Lambda Calculus
  • 14.
    Variables ligadas yvariables 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 Programación funcional Lambda Calculus
  • 15.
    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) //No termina… (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) (λx. x x) Programación funcional Lambda Calculus
  • 16.
    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) Números 0 := λf . λx . x 1 := λf . λx . f x 2 := λf . λx . f (f x) 3 := λf . λx . f (f (f x)) Programación funcional Lambda Calculus
  • 17.
    Linea de tiempode 
 los lenguajes funcionales Programación funcional Historia
  • 18.
    Clojure (2007) F# (2005) Scala(2004) Haskell (1990) Erlang (1986) Miranda (1985) FP (1977) ML (1973) ISWIM (1966) LISP (1960) Rich HickeyMartin OderskyJoe ArmstrongJhon BackusPeter Landin MicrosoftComité internacional (Yale y Glasgow) David TurnerRobert MilnerJohn McCarthy Programación funcional Historia
  • 19.
    Programación funcional ¿Porqué ahora? ¿Porquéhoy en día los lenguajes están incluyendo características funcionales?
  • 20.
    • En cienciasde la computación, las buenas ideas suelen tomarse muchos años después. Simula 67 (1967) fue el primer lenguaje orientado a objetos pero solo con la aparición de c++ (1983) OOP se volvió popular. • Con el paso de los años los problemas se han vuelto más complejos y resolverlos implica ejecutar tareas en paralelo (hilos) y/o de forma distribuida (cloud). La programación funcional elimina el problema de sincronización de estado. • Al trabajar con funciones puras y eliminar los efectos secundarios, los programas tienden a ser más confiables y más fáciles de testear. Programación funcional ¿Porqué ahora?
  • 21.
    Lo más importantede programar funcionalmente no es el lenguaje ni la sintaxis sino el cambio de pensamiento. Programación funcional Cambio de pensamiento
  • 22.
  • 23.
  • 24.
    Ahora que sabemosque lo que importa es el cambio de pensamiento, veamos algunas definiciones. Programación funcional Definiciones
  • 25.
    Transparencia referencial Decimos queuna expresión es transparentemente referencial si podemos reemplazar el valor de todas sus ocurrencias en el programa sin alterar el funcionamiento del mismo. Programación funcional Definiciones
  • 26.
    Valores inmutables La modificaciónde 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. Programación funcional Definiciones
  • 27.
    Valores inmutables No semodifican las estructuras, por ejemplo una nueva propiedad en un objeto o un nuevo elemento en un array usando push. Siempre debemos crear nuevos objetos. Programación funcional Definiciones
  • 28.
    Valores inmutables Lo mismosucede con las nuevas estructuras de ES6 Programación funcional Definiciones
  • 29.
    Funciones de ordensuperior Este tipo de funciones toman otras funciones como parámetros o retornan otras funciones como resultados. Programación funcional Definiciones
  • 30.
    Composición de funciones Podemoscomponer funciones para obtener una sola función (no incluído en js por defecto). Programación funcional Definiciones js Ramda
  • 31.
    Recursividad Las iteraciones serealizan utilizando funciones recursivas. Programación funcional Definiciones Versión con optimización por cola (PTC) https://github.com/tc39/proposal-ptc-syntax
  • 32.
    Muchos han estadousando la programación funcional sin siquiera saberlo… Programación funcional Ejemplos en lenguajes
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
    A lo largode la historia, el uso de variables e hilos no ha funcionado muy bien, veamos algunos ejemplos… Programación funcional Historias de la programación imperativa
  • 39.
    Therac-25 Therac-25 fue unamaquina 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 Programación funcional Historias de la programación imperativa
  • 40.
    Apagón del norestedel 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 Programación funcional Historias de la programación imperativa
  • 41.
    Podemos utilizar programaciónfuncional para cambiar el manejo de hilos con datos mutables y usar la naturaleza de la programación funcional para trabajar con datos inmutables. Programación funcional Historias de la programación imperativa
  • 42.
    Creo que ahorasi estamos avanzando…
  • 43.
    Lo que hemosvisto hasta ahora es solo la punta del iceberg, podemos utilizar algunas librerías para potenciar la programación funcional en Javascript. Programación funcional Librerías
  • 44.
  • 45.
    O también podemosusar lenguajes funcionales que compilan a Javascript… Programación funcional Librerías
  • 46.
  • 47.
    Demos un vistazoa Scala.js. Programación funcional Scala.js
  • 48.
    • Eliminación deerrores de tipos • Código compartido entre cliente/servidor • Interoperabilidad con Javascript • Reversa de urls con chequeo de errores • Optimización y compresión de código • Parámetros call by name • Valores opcionales (undefined) • Valores inmutables (reales) • Pattern Matching • Estructuras de datos adicionales (tuplas, listas, entre otros) • For Comprehensions and guards (https:// docs.scala-lang.org/tour/for- comprehensions.html) • Funciones parcialmente aplicadas Programación funcional Scala.js Ventajas de Scala.js
  • 49.
    Programación funcional Scala.js Equivalencias jsa Scala.js https://www.scala-js.org/doc/sjs-for-js/es6-to-scala-part1.html
  • 50.
    Temas de interés: LambdaCalculi 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 Programación funcional Enlaces
  • 51.
    Temas de interés: LearnHaskell 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 Programación funcional Enlaces
  • 52.
    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 Programación funcional Enlaces
  • 53.