Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programacin Funcional
Ernesto Hernndez-Novich
<emhn@usb.ve>
Universidad Simn Bolvar
c 2007-2014
Copyright
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
1 / 13
Programacin Funcional
Conceptos Fundamentales
Programacin Funcional
Conceptos Fundamentales
Programacin Funcional
Salida de un programa es una funcin de sus entradas
Se excluyen las nociones de estado mutable y efecto de borde.
Derivada del -Clculo de Alonso Church (1936)
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
2 / 13
Programacin Funcional
Conceptos Fundamentales
Programacin Funcional
Conceptos Fundamentales
Programacin Funcional
Salida de un programa es una funcin de sus entradas
Se excluyen las nociones de estado mutable y efecto de borde.
Derivada del -Clculo de Alonso Church (1936)
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
2 / 13
Visin prctica
Evaluar
Programar es evaluar
Transformar valores por aplicacin de funciones
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
3 / 13
Visin prctica
Evaluar
Lenguajes Interpretados
LISP y sus dialectos... Racket es el favorito
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
4 / 13
Visin prctica
Evaluar
Asociaciones
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
5 / 13
Visin prctica
Evaluar
Tipos de Datos
Listas heterogneas.
Funciones para descomposicin (car, cdr y sus extensiones).
Funciones para composicin (cons, append y list)
Predicados (null? para vacuidad).
Listas de Asociacin (assq para bsqueda).
Nmeros.
Funciones aritmticas y trascendentales.
Predicados para comparacin.
Booleanos (#t y #f):
Comparacin.
Son el mismo objeto? (eq?).
Son semnticamente equivalentes? (eqv?).
Son estructuralmente equivalentes? (equal?).
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
6 / 13
Visin prctica
Evaluar
Estructuras de Control
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
7 / 13
Visin prctica
Evaluar
Tratamiento avanzado
I/O rompe la pureza del lenguaje en Racket.
Interactivo o con archivos (ports).
read/write vs. read-char/write-char.
Vectores vs. Listas.
Macros higinicos garantizan que no habr colisiones.
Si definen nombres, nunca coincidirn con nombres existentes.
Si definen nombres libres, refieren al ambiente previo a la expansin.
Continuaciones call-cc
Estructuras de control ad hoc.
Excepciones.
Co-rutinas.
Evaluacin diferida (delay y force).
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
8 / 13
Orden de Evaluacin
Orden de Evaluacin
Orden de Evaluacin
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
9 / 13
Orden de Evaluacin
Orden de Evaluacin
Evaluacin Perezosa
Funcin Estricta
Requiere que todos sus argumentos estn definidos.
Obtener el valor resultado no depende del orden de evaluacin
si los argumentos estn definidos, siempre puede calcularse.
Funcin No Estricta
Puede operar con argumentos que no estn definidos.
Calcular el resultado depende de que slo se evalen argumentos
definidos en el orden preciso.
Un lenguaje es estricto si obliga funciones estrictas Racket, ML.
Un lenguaje no es estricto en el caso contrario Haskell, R.
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
10 / 13
Orden de Evaluacin
Orden de Evaluacin
Evaluacin Perezosa
Funcin Estricta
Requiere que todos sus argumentos estn definidos.
Obtener el valor resultado no depende del orden de evaluacin
si los argumentos estn definidos, siempre puede calcularse.
Funcin No Estricta
Puede operar con argumentos que no estn definidos.
Calcular el resultado depende de que slo se evalen argumentos
definidos en el orden preciso.
Un lenguaje es estricto si obliga funciones estrictas Racket, ML.
Un lenguaje no es estricto en el caso contrario Haskell, R.
La Evaluacin Perezosa combina
Orden Normal de Evaluacin.
Ejecucin a velocidad equivalente a lenguajes estrictos.
Valores se marcan como promesa evaluada slo si es necesaria.
Particularmente til para esctructuras infinitas.
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
10 / 13
Orden de Evaluacin
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
11 / 13
Orden de Evaluacin
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
12 / 13
Orden de Evaluacin
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
12 / 13
Orden de Evaluacin
Lenguajes de Programacin I
2014
12 / 13
Referencias Bibliogrficas
Bibliografa
[Scott]
Captulo 10
Ejercicios y Exploraciones
The Scheme Programming Language
Structure and Interpretation of Computer Programs
Hernndez-Novich (USB)
Lenguajes de Programacin I
2014
13 / 13