Programaci´n Funcional
          o




                                   Micro-Introducci´n
                                                   o
                                          a la
            λ                        Programaci´n
                                                o                    λ
                                       Funcional




Daniel Molina Wegener (coder.cl)     Programaci´n Funcional
                                               o              24 de julio de 2011   1/9
Programaci´n Funcional
                                             o

                                     Daniel Molina Wegener

                                        http://coder.cl/
                                        @damowe en twitter


                        Copyright c 2011 Daniel Molina Wegener




Daniel Molina Wegener (coder.cl)         Programaci´n Funcional
                                                   o              24 de julio de 2011   2/9
Tabla de Contenidos


1   Caracter´
            ısticas

2   Generalidades

3   Aspectos Te´ricos
               o

4   Implementacion

5   Abstracciones

6   ¿FIN?



Daniel Molina Wegener (coder.cl)   Programaci´n Funcional
                                             o              24 de julio de 2011   3/9
Caracter´
                                            ısticas


Caracter´
        ısticas



       ¿Como se diferencian los lenguajes funcionales?
       ¿Puede retornar una funci´n?
                                o




 Daniel Molina Wegener (coder.cl)       Programaci´n Funcional
                                                  o              24 de julio de 2011   4/9
Caracter´
                                            ısticas


Caracter´
        ısticas



       ¿Como se diferencian los lenguajes funcionales?
       ¿Puede retornar una funci´n?
                                o
       ¿Puede asignar una funci´n a una variable?
                               o




 Daniel Molina Wegener (coder.cl)       Programaci´n Funcional
                                                  o              24 de julio de 2011   4/9
Caracter´
                                            ısticas


Caracter´
        ısticas



       ¿Como se diferencian los lenguajes funcionales?
       ¿Puede retornar una funci´n?
                                o
       ¿Puede asignar una funci´n a una variable?
                               o
       ¿Puede pasar funciones como par´metros?
                                      a




 Daniel Molina Wegener (coder.cl)       Programaci´n Funcional
                                                  o              24 de julio de 2011   4/9
Caracter´
                                            ısticas


Caracter´
        ısticas



       ¿Como se diferencian los lenguajes funcionales?
       ¿Puede retornar una funci´n?
                                o
       ¿Puede asignar una funci´n a una variable?
                               o
       ¿Puede pasar funciones como par´metros?
                                      a
       ¿Tiene funciones an´nimas?
                          o




 Daniel Molina Wegener (coder.cl)       Programaci´n Funcional
                                                  o              24 de julio de 2011   4/9
Caracter´
                                            ısticas


Caracter´
        ısticas



       ¿Como se diferencian los lenguajes funcionales?
       ¿Puede retornar una funci´n?
                                o
       ¿Puede asignar una funci´n a una variable?
                               o
       ¿Puede pasar funciones como par´metros?
                                      a
       ¿Tiene funciones an´nimas?
                          o
       ¿Soporta recursividad?




 Daniel Molina Wegener (coder.cl)       Programaci´n Funcional
                                                  o              24 de julio de 2011   4/9
Caracter´
                                            ısticas


Caracter´
        ısticas



       ¿Como se diferencian los lenguajes funcionales?
       ¿Puede retornar una funci´n?
                                o
       ¿Puede asignar una funci´n a una variable?
                               o
       ¿Puede pasar funciones como par´metros?
                                      a
       ¿Tiene funciones an´nimas?
                          o
       ¿Soporta recursividad?
       ¿Tiene Clases de Tipo (Funcional)?




 Daniel Molina Wegener (coder.cl)       Programaci´n Funcional
                                                  o              24 de julio de 2011   4/9
Caracter´
                                            ısticas


Caracter´
        ısticas



       ¿Como se diferencian los lenguajes funcionales?
       ¿Puede retornar una funci´n?
                                o
       ¿Puede asignar una funci´n a una variable?
                               o
       ¿Puede pasar funciones como par´metros?
                                      a
       ¿Tiene funciones an´nimas?
                          o
       ¿Soporta recursividad?
       ¿Tiene Clases de Tipo (Funcional)?




 Daniel Molina Wegener (coder.cl)       Programaci´n Funcional
                                                  o              24 de julio de 2011   4/9
Generalidades


Generalidades


      Fuerte Base Te´rica
                     o
      C´lculo Lambda, Combinatoria, Reducciones Formales
       a
      Teor´ de Categor´ y Sistemas de Tipos
          ıa          ıas
      Entre otros...

      Funciones como Abstraccion
      Funciones como habitantes de Primera Clase
      Funciones de Alto Orden
      Closures, Monoids, Functors y Monads




Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   5/9
Generalidades


Generalidades


      Fuerte Base Te´rica
                     o
      C´lculo Lambda, Combinatoria, Reducciones Formales
       a
      Teor´ de Categor´ y Sistemas de Tipos
          ıa          ıas
      Entre otros...

      Funciones como Abstraccion
      Funciones como habitantes de Primera Clase
      Funciones de Alto Orden
      Closures, Monoids, Functors y Monads

      El conflicto de la Pureza
      I/O y Datos Externos



Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   5/9
Generalidades


Generalidades


      Fuerte Base Te´rica
                     o
      C´lculo Lambda, Combinatoria, Reducciones Formales
       a
      Teor´ de Categor´ y Sistemas de Tipos
          ıa          ıas
      Entre otros...

      Funciones como Abstraccion
      Funciones como habitantes de Primera Clase
      Funciones de Alto Orden
      Closures, Monoids, Functors y Monads

      El conflicto de la Pureza
      I/O y Datos Externos



Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   5/9
Aspectos Te´ricos
                                              o


Aspectos Te´ricos
           o

      M´todos Formales, contribuci´n de Alonzo Church
        e                           o
      C´lculo Lambda
       a
      Tesis Church-Turing (computabilidad)

      M´todos Formales
        e
      Reducciones Formales
      Verificaci´n L´gica
               o o




Daniel Molina Wegener (coder.cl)          Programaci´n Funcional
                                                    o              24 de julio de 2011   6/9
Aspectos Te´ricos
                                              o


Aspectos Te´ricos
           o

      M´todos Formales, contribuci´n de Alonzo Church
        e                           o
      C´lculo Lambda
       a
      Tesis Church-Turing (computabilidad)

      M´todos Formales
        e
      Reducciones Formales
      Verificaci´n L´gica
               o o

      Ejemplos de Combinadores Conocidos
      I = λx.x (identity)
      T = λxy .x (true)
      F = λxy .y (false)
      S = λxyz.xz(yz) (successor)
      Y = λf .(λx.f (xx))(λx.f (xx))) (y-combinator)


Daniel Molina Wegener (coder.cl)          Programaci´n Funcional
                                                    o              24 de julio de 2011   6/9
Aspectos Te´ricos
                                              o


Aspectos Te´ricos
           o

      M´todos Formales, contribuci´n de Alonzo Church
        e                           o
      C´lculo Lambda
       a
      Tesis Church-Turing (computabilidad)

      M´todos Formales
        e
      Reducciones Formales
      Verificaci´n L´gica
               o o

      Ejemplos de Combinadores Conocidos
      I = λx.x (identity)
      T = λxy .x (true)
      F = λxy .y (false)
      S = λxyz.xz(yz) (successor)
      Y = λf .(λx.f (xx))(λx.f (xx))) (y-combinator)


Daniel Molina Wegener (coder.cl)          Programaci´n Funcional
                                                    o              24 de julio de 2011   6/9
Implementacion


Implementacion


      Abstracciones
      Funci´n
           o
      Funci´n An´nima
           o    o
      Closure
      Monoid
      Functor
      Monad

      Tipificaci´n
               o
      Calculo Lambda Tipificado
      Sistemas de Tipos
      Teor´ de Categorias
           ıa



Daniel Molina Wegener (coder.cl)        Programaci´n Funcional
                                                  o              24 de julio de 2011   7/9
Implementacion


Implementacion


      Abstracciones
      Funci´n
           o
      Funci´n An´nima
           o    o
      Closure
      Monoid
      Functor
      Monad

      Tipificaci´n
               o
      Calculo Lambda Tipificado
      Sistemas de Tipos
      Teor´ de Categorias
           ıa



Daniel Molina Wegener (coder.cl)        Programaci´n Funcional
                                                  o              24 de julio de 2011   7/9
Abstracciones


Abstracciones

      Funci´n
           o
      Como evaluaci´n de una expresi´n
                   o                o

      Funci´n An´nima
           o      o
      Habitante de primera clase, con el mismo tratamiento




Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   8/9
Abstracciones


Abstracciones

      Funci´n
           o
      Como evaluaci´n de una expresi´n
                   o                o

      Funci´n An´nima
           o      o
      Habitante de primera clase, con el mismo tratamiento

      Closure
      Funci´n con Datos (opuesto a Objeto, datos con funciones)
           o




Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   8/9
Abstracciones


Abstracciones

      Funci´n
           o
      Como evaluaci´n de una expresi´n
                   o                o

      Funci´n An´nima
           o      o
      Habitante de primera clase, con el mismo tratamiento

      Closure
      Funci´n con Datos (opuesto a Objeto, datos con funciones)
           o

      Monoid
      Abstracci´n de Operador (aplicado a elementos de un tipo)
               o




Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   8/9
Abstracciones


Abstracciones

      Funci´n
           o
      Como evaluaci´n de una expresi´n
                   o                o

      Funci´n An´nima
           o      o
      Habitante de primera clase, con el mismo tratamiento

      Closure
      Funci´n con Datos (opuesto a Objeto, datos con funciones)
           o

      Monoid
      Abstracci´n de Operador (aplicado a elementos de un tipo)
               o

      Functor
      Funci´n Aplicada a un Tipo
           o



Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   8/9
Abstracciones


Abstracciones

      Funci´n
           o
      Como evaluaci´n de una expresi´n
                   o                o

      Funci´n An´nima
           o      o
      Habitante de primera clase, con el mismo tratamiento

      Closure
      Funci´n con Datos (opuesto a Objeto, datos con funciones)
           o

      Monoid
      Abstracci´n de Operador (aplicado a elementos de un tipo)
               o

      Functor
      Funci´n Aplicada a un Tipo
           o

      Monad
      Cadena de Functors aplicados a un Tipo
Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   8/9
Abstracciones


Abstracciones

      Funci´n
           o
      Como evaluaci´n de una expresi´n
                   o                o

      Funci´n An´nima
           o      o
      Habitante de primera clase, con el mismo tratamiento

      Closure
      Funci´n con Datos (opuesto a Objeto, datos con funciones)
           o

      Monoid
      Abstracci´n de Operador (aplicado a elementos de un tipo)
               o

      Functor
      Funci´n Aplicada a un Tipo
           o

      Monad
      Cadena de Functors aplicados a un Tipo
Daniel Molina Wegener (coder.cl)      Programaci´n Funcional
                                                o              24 de julio de 2011   8/9
¿FIN?


¿FIN?




                                   Preparado con LTEX
                                                  A
                             Compilado el 24 de julio de 2011
                         Coyright c 2011 Daniel Molina Wegener




Daniel Molina Wegener (coder.cl)     Programaci´n Funcional
                                               o                 24 de julio de 2011   9/9

Micro-Introducción a la Programacion Funcional

  • 1.
    Programaci´n Funcional o Micro-Introducci´n o a la λ Programaci´n o λ Funcional Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 1/9
  • 2.
    Programaci´n Funcional o Daniel Molina Wegener http://coder.cl/ @damowe en twitter Copyright c 2011 Daniel Molina Wegener Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 2/9
  • 3.
    Tabla de Contenidos 1 Caracter´ ısticas 2 Generalidades 3 Aspectos Te´ricos o 4 Implementacion 5 Abstracciones 6 ¿FIN? Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 3/9
  • 4.
    Caracter´ ısticas Caracter´ ısticas ¿Como se diferencian los lenguajes funcionales? ¿Puede retornar una funci´n? o Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 4/9
  • 5.
    Caracter´ ısticas Caracter´ ısticas ¿Como se diferencian los lenguajes funcionales? ¿Puede retornar una funci´n? o ¿Puede asignar una funci´n a una variable? o Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 4/9
  • 6.
    Caracter´ ısticas Caracter´ ısticas ¿Como se diferencian los lenguajes funcionales? ¿Puede retornar una funci´n? o ¿Puede asignar una funci´n a una variable? o ¿Puede pasar funciones como par´metros? a Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 4/9
  • 7.
    Caracter´ ısticas Caracter´ ısticas ¿Como se diferencian los lenguajes funcionales? ¿Puede retornar una funci´n? o ¿Puede asignar una funci´n a una variable? o ¿Puede pasar funciones como par´metros? a ¿Tiene funciones an´nimas? o Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 4/9
  • 8.
    Caracter´ ısticas Caracter´ ısticas ¿Como se diferencian los lenguajes funcionales? ¿Puede retornar una funci´n? o ¿Puede asignar una funci´n a una variable? o ¿Puede pasar funciones como par´metros? a ¿Tiene funciones an´nimas? o ¿Soporta recursividad? Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 4/9
  • 9.
    Caracter´ ısticas Caracter´ ısticas ¿Como se diferencian los lenguajes funcionales? ¿Puede retornar una funci´n? o ¿Puede asignar una funci´n a una variable? o ¿Puede pasar funciones como par´metros? a ¿Tiene funciones an´nimas? o ¿Soporta recursividad? ¿Tiene Clases de Tipo (Funcional)? Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 4/9
  • 10.
    Caracter´ ısticas Caracter´ ısticas ¿Como se diferencian los lenguajes funcionales? ¿Puede retornar una funci´n? o ¿Puede asignar una funci´n a una variable? o ¿Puede pasar funciones como par´metros? a ¿Tiene funciones an´nimas? o ¿Soporta recursividad? ¿Tiene Clases de Tipo (Funcional)? Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 4/9
  • 11.
    Generalidades Generalidades Fuerte Base Te´rica o C´lculo Lambda, Combinatoria, Reducciones Formales a Teor´ de Categor´ y Sistemas de Tipos ıa ıas Entre otros... Funciones como Abstraccion Funciones como habitantes de Primera Clase Funciones de Alto Orden Closures, Monoids, Functors y Monads Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 5/9
  • 12.
    Generalidades Generalidades Fuerte Base Te´rica o C´lculo Lambda, Combinatoria, Reducciones Formales a Teor´ de Categor´ y Sistemas de Tipos ıa ıas Entre otros... Funciones como Abstraccion Funciones como habitantes de Primera Clase Funciones de Alto Orden Closures, Monoids, Functors y Monads El conflicto de la Pureza I/O y Datos Externos Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 5/9
  • 13.
    Generalidades Generalidades Fuerte Base Te´rica o C´lculo Lambda, Combinatoria, Reducciones Formales a Teor´ de Categor´ y Sistemas de Tipos ıa ıas Entre otros... Funciones como Abstraccion Funciones como habitantes de Primera Clase Funciones de Alto Orden Closures, Monoids, Functors y Monads El conflicto de la Pureza I/O y Datos Externos Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 5/9
  • 14.
    Aspectos Te´ricos o Aspectos Te´ricos o M´todos Formales, contribuci´n de Alonzo Church e o C´lculo Lambda a Tesis Church-Turing (computabilidad) M´todos Formales e Reducciones Formales Verificaci´n L´gica o o Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 6/9
  • 15.
    Aspectos Te´ricos o Aspectos Te´ricos o M´todos Formales, contribuci´n de Alonzo Church e o C´lculo Lambda a Tesis Church-Turing (computabilidad) M´todos Formales e Reducciones Formales Verificaci´n L´gica o o Ejemplos de Combinadores Conocidos I = λx.x (identity) T = λxy .x (true) F = λxy .y (false) S = λxyz.xz(yz) (successor) Y = λf .(λx.f (xx))(λx.f (xx))) (y-combinator) Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 6/9
  • 16.
    Aspectos Te´ricos o Aspectos Te´ricos o M´todos Formales, contribuci´n de Alonzo Church e o C´lculo Lambda a Tesis Church-Turing (computabilidad) M´todos Formales e Reducciones Formales Verificaci´n L´gica o o Ejemplos de Combinadores Conocidos I = λx.x (identity) T = λxy .x (true) F = λxy .y (false) S = λxyz.xz(yz) (successor) Y = λf .(λx.f (xx))(λx.f (xx))) (y-combinator) Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 6/9
  • 17.
    Implementacion Implementacion Abstracciones Funci´n o Funci´n An´nima o o Closure Monoid Functor Monad Tipificaci´n o Calculo Lambda Tipificado Sistemas de Tipos Teor´ de Categorias ıa Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 7/9
  • 18.
    Implementacion Implementacion Abstracciones Funci´n o Funci´n An´nima o o Closure Monoid Functor Monad Tipificaci´n o Calculo Lambda Tipificado Sistemas de Tipos Teor´ de Categorias ıa Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 7/9
  • 19.
    Abstracciones Abstracciones Funci´n o Como evaluaci´n de una expresi´n o o Funci´n An´nima o o Habitante de primera clase, con el mismo tratamiento Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 8/9
  • 20.
    Abstracciones Abstracciones Funci´n o Como evaluaci´n de una expresi´n o o Funci´n An´nima o o Habitante de primera clase, con el mismo tratamiento Closure Funci´n con Datos (opuesto a Objeto, datos con funciones) o Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 8/9
  • 21.
    Abstracciones Abstracciones Funci´n o Como evaluaci´n de una expresi´n o o Funci´n An´nima o o Habitante de primera clase, con el mismo tratamiento Closure Funci´n con Datos (opuesto a Objeto, datos con funciones) o Monoid Abstracci´n de Operador (aplicado a elementos de un tipo) o Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 8/9
  • 22.
    Abstracciones Abstracciones Funci´n o Como evaluaci´n de una expresi´n o o Funci´n An´nima o o Habitante de primera clase, con el mismo tratamiento Closure Funci´n con Datos (opuesto a Objeto, datos con funciones) o Monoid Abstracci´n de Operador (aplicado a elementos de un tipo) o Functor Funci´n Aplicada a un Tipo o Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 8/9
  • 23.
    Abstracciones Abstracciones Funci´n o Como evaluaci´n de una expresi´n o o Funci´n An´nima o o Habitante de primera clase, con el mismo tratamiento Closure Funci´n con Datos (opuesto a Objeto, datos con funciones) o Monoid Abstracci´n de Operador (aplicado a elementos de un tipo) o Functor Funci´n Aplicada a un Tipo o Monad Cadena de Functors aplicados a un Tipo Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 8/9
  • 24.
    Abstracciones Abstracciones Funci´n o Como evaluaci´n de una expresi´n o o Funci´n An´nima o o Habitante de primera clase, con el mismo tratamiento Closure Funci´n con Datos (opuesto a Objeto, datos con funciones) o Monoid Abstracci´n de Operador (aplicado a elementos de un tipo) o Functor Funci´n Aplicada a un Tipo o Monad Cadena de Functors aplicados a un Tipo Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 8/9
  • 25.
    ¿FIN? ¿FIN? Preparado con LTEX A Compilado el 24 de julio de 2011 Coyright c 2011 Daniel Molina Wegener Daniel Molina Wegener (coder.cl) Programaci´n Funcional o 24 de julio de 2011 9/9