$30 off During Our Annual Pro Sale. View Details »

Historia de la programación funcional y lambda calculus

mordonez
September 15, 2016

Historia de la programación funcional y lambda calculus

Esta es la presentación que se utilizó para un evento en la universidad San Ignacio de Loyola. El contenido de la presentación muestra el origen de la programación funcional, un breve vistazo a lambda calculus y temas de interés relacionados al tema.

mordonez

September 15, 2016
Tweet

More Decks by mordonez

Other Decks in Science

Transcript

  1. 02
    ¿Qué es la 

    programación
    funcional?

    View Slide

  2. ¿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.

    View Slide

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

    View Slide

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

    View Slide

  5. ¿Entscheidungsproblem?

    View Slide

  6. ¿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).

    View Slide

  7. ¿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.

    View Slide

  8. ¿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))

    View Slide

  9. ¿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.

    View Slide

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

    View Slide

  11. ¿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.

    View Slide

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

    View Slide

  13. ¿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

    View Slide

  14. ¿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)

    View Slide

  15. ¿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

    View Slide

  16. ¿Qué es la programación funcional?
    Lambda Calculus
    Sustitución
    (λx.x)(λy.y) = x[x := (λy.y)] = (λy.y)
    (λx.(λy.x + y))3 = (λy.x + y)[x := 3] = (λy.3 + y)

    View Slide

  17. ¿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)

    View Slide

  18. ¿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))

    View Slide

  19. ¿Qué es la programación funcional?
    Lambda Calculus
    Linea de tiempo de 

    los lenguajes funcionales

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  36. ¿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

    View Slide

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

    View Slide

  38. ¿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

    View Slide

  39. ¿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.

    View Slide

  40. ¿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.

    View Slide

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

    View Slide

  42. ¿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…

    View Slide

  43. ¿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

    View Slide

  44. ¿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

    View Slide

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

    View Slide

  46. Creo que ahora si estamos avanzando…

    View Slide

  47. ¿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.

    View Slide

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

    View Slide

  49. 02
    ¿Qué es el
    manifiesto
    reactivo?

    View Slide

  50. ¿Qué es manifiesto reactivo?
    Concepto
    Los Sistemas construidos como Sistemas Reactivos son más flexibles,
    con bajo acoplamiento y escalables. Esto hace que ellos sean más fáciles de desarrollar y mas simples
    para cambiar. Ellos son significativamente más tolerantes a fallas 

    y cuando fallan lo hacen con elegancia en vez de ser un desastre. Los sistemas reactivos son altamente
    responsivos, dando a los usuarios retroalimentación efectiva e interactiva.

    View Slide

  51. ¿Qué es manifiesto reactivo?
    Herramientas
    Un conjunto de herramientas para el desarrollo de aplicaciones reactivas.

    View Slide

  52. ¿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

    View Slide

  53. ¿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

    View Slide

  54. ¿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

    View Slide

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

    View Slide