Está en la página 1de 17

Lenguajes de Programacin I

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)

equivalente al modelo imperativo (Tesis de Church-Turing).

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)

equivalente al modelo imperativo (Tesis de Church-Turing).


Caracterizada por:

Funciones de primera clase.


Funciones de orden superior.
Funciones que retornan valores estructurados.
Polimorfismo dinmico (Racket) o esttico (Haskell).
Tipo Lista con abundantes operadores.
Recursin.
Tipos agregados definibles por el usuario.
Recoleccin de basura.

Hernndez-Novich (USB)

Lenguajes de Programacin I

2014

2 / 13

Visin prctica

Evaluar

Programar es evaluar
Transformar valores por aplicacin de funciones

Programar funcionalmente requiere:


Definir funciones.
Componerlas.
Aplicarlas o evaluarlas.
Ciclo read-eval-loop en lenguajes interpretados Racket.
Compilar y ejecutar en lenguajes compilados Haskell.

Hernndez-Novich (USB)

Lenguajes de Programacin I

2014

3 / 13

Visin prctica

Evaluar

Lenguajes Interpretados
LISP y sus dialectos... Racket es el favorito

El interpretador lee expresiones-S (S-expressions).


La expresin se evala
Notacin polaca prefija.
Parntesis indican aplicacin funcional.
Primer elemento de la expresin se asume como funcin.
Resto de los elementos se asumen como argumentos.
Manejo dinmico de tipos.
Nmeros.
Smbolos (tambin llamados tomos).
Listas.
Cadenas slo en implantaciones modernas.
Funciones annimas lambda expressions.

Hernndez-Novich (USB)

Lenguajes de Programacin I

2014

4 / 13

Visin prctica

Evaluar

Asociaciones

Asociar nombres a valores usando un alcance esttico.


Lista de asociaciones paralelas (let).
Lista de asociaciones ordenadas (let*).
Lista de asociaciones recursivas (letrec).
La intencin es simplificar expresiones.
Asociaciones puras valores no pueden modificarse en las expresiones.
Asociaciones globales (define) para definir funciones con nombre.

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

Seleccin Simple (if).


Seleccin Generalizada (cond).
Recursin.
Los programas vistos como listas
Evaluacin de expresiones (eval).
Aplicacin de funciones (apply).

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

Aplicativo evaluar argumentos antes de evaluar la funcin.


Normal evaluar la funcin antes que los argumentos, y stos

ltimos se evalan solamente si son necesarios.


Ambos rdenes llegan al mismo valor final, si est definido.
Ninguna es particularmente ms eficiente que la otra.

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

Funciones de Orden Superior

Funciones de Orden Superior

Una funcin es de Orden Superior si recibe funciones como

argumentos o retorna funciones como resultado.


Tambin se les llama Formas Funcionales.
Aplicacin explcita.
Composicin de funciones.
Iteracin implcita
map
filter
folds
scans
Currying y Un-currying.

Hernndez-Novich (USB)

Lenguajes de Programacin I

2014

11 / 13

Orden de Evaluacin

Interaccin con el exterior

Pero el mundo real no es puro!


Es un gran efecto de borde

Los primeros lenguajes funcionales no tuvieron reparos en incluir

componentes impuros para ser tiles


read y display para leer y escribir valores.
set! para modificar valores en sitio.

Hernndez-Novich (USB)

Lenguajes de Programacin I

2014

12 / 13

Orden de Evaluacin

Interaccin con el exterior

Pero el mundo real no es puro!


Es un gran efecto de borde

Los primeros lenguajes funcionales no tuvieron reparos en incluir

componentes impuros para ser tiles


read y display para leer y escribir valores.
set! para modificar valores en sitio.

Y si imaginamos al mundo como un fludo?


Una lista infinita de entradas de la cual tomar datos en orden. . .
. . . y poner resultados en una infinita lista de salida.
Streams de ML y las primeras versiones de Haskell.
No modelan correctamente las interfaces modales por eventos, el
acceso directo a archivos, ni el polimorfismo.

Hernndez-Novich (USB)

Lenguajes de Programacin I

2014

12 / 13

Orden de Evaluacin

Interaccin con el exterior

Pero el mundo real no es puro!


Es un gran efecto de borde

Los primeros lenguajes funcionales no tuvieron reparos en incluir

componentes impuros para ser tiles


read y display para leer y escribir valores.
set! para modificar valores en sitio.

Y si imaginamos al mundo como un fludo?


Una lista infinita de entradas de la cual tomar datos en orden. . .
. . . y poner resultados en una infinita lista de salida.
Streams de ML y las primeras versiones de Haskell.
No modelan correctamente las interfaces modales por eventos, el
acceso directo a archivos, ni el polimorfismo.
Y si tuviramos el mundo en la mano? un valor de estado mutable
Funciones de orden superior que se aplican en un orden especfico
un punto y coma controlable.
Programador define Monads concretas para sus propsitos
Haskell provee un Monad abstracto para IO.
Hernndez-Novich (USB)

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

También podría gustarte