Vous êtes sur la page 1sur 18

Agenda Clase 16

Motivacin e Historia de la Programacin


Funcional y la Programacin Lgica.
Concepto y Caractersticas de la
Programacin Funcional.
Ventajas y Desventajas de los lenguajes
funcionales.
Caso de Estudio: Scheme.

Programacin lgica y funcional:


Motivacin
Los lenguajes lgicos son utilizados por lo
general para especificaciones formales y
pruebas de teoremas. Pej: diseo de circuitos
digitales, estudio formal de la semntica de los
lenguajes.
Por su parte los lenguajes funcionales se han
vuelto populares para aplicaciones cientficas y
de negocio.

Programacin lgica y funcional:


Antecedentes Histricos.
30s Alan Turing, Alonzo Church, Stephen
Kleene y Emil Post desarrollan por separado
formalizaciones de la nocin de algoritmo.
Turing Mquina de Turing
Church equivalencia entre lenguajes, Lambda
Clculo.
Kleene y Post definiciones abstractas sin
vinculacin directa a la implementacin de un
lenguaje de programacin.

Programacin Funcional: Concepto.


La programacin funcional define las salidas de
un programa como una funcin matemtica de
sus entradas, sin nocin de estado interno, y,
por tanto sin efectos de borde.
Lisp lenguaje funcional original y el ms
utilizado.
Algunos lenguajes funcionales: Scheme,
Common Lisp, Ml, Miranda, Haskell, Sisal.

Programacin Funcional:
Caractersticas prcticas
Valores de Funciones de Primer Orden y
Funciones de Orden Superior.
Polimorfismo.
Tipo Lista y sus Operadores.
Recursin.
Retorno de datos estructurados.
Constructores de objetos estructurados.
Recoleccin de Basura.

Ventajas y Desventajas de los


lenguajes funcionales.
Ventajas:
Ms fciles de escribir, depurar y mantener
que los lenguajes imperativos gracias a la
ausencia de efectos de borde.
Desventajas:
Se quedan cortos en portabilidad, riqueza de
libreras, interfaces con otros lenguajes y
herramientas de depuracin.

Caso de Estudio: Scheme


Se analiza ya que procede de Lisp que es
el lenguaje funcional ms utilizado.
Caractersticas adicionales de Lisp
aplicables a Scheme:
Homogeneidad de programas y datos.
Autodefinicin.
Interaccin con el usuario a travs de un ciclo
leer-evaluar-imprimir.

Scheme: Caractersticas
Notacin Cambridge-Polish
La utilizacin de parntesis indican la
aplicacin de una funcin o el uso de un
macro.
El smbolo de quoting () evita que el
interpretador evale una expresin.
El tipo de los elementos es determinado a
tiempo de corrida.

Scheme: Predicados
A pesar de ser un lenguaje funcional
Scheme ofrece entre otros los siguientes
predicados:
(boolean? x)
(char? x)
(string? x)
(symbol? x)
(member? x)
(pair? x)

(list? x)
#t
#f

Scheme: Funciones definidas por el


usuario.
Las funciones se definen a travs de la palabra
reservada lambda
(lambda (x) (* x x))
Lista de parmetros
formales de la funcin
Cuerpo de la funcin

Expresiones condicionales pueden ser escritas


utilizando un if. Pej: (if (< 2 3) 4 5 ) 4

Scheme: Asociacin (Binding)


Para asociar un nombre a una funcin se
utilizan las expresiones let (localmente) o
define (globalmente).
(let ((a 3) (b 4) (square (lambda (x) (*x
(plus +))
Lista de pares nombre valor
(sqrt (plus (square a) (square b) )))
Aplicacin de funciones definidas.

Se utiliza la funcin letrec para funciones


recursivas.
(letrec ((fact (lambda (n) (if (= n 1) 1
(* n (fact (- n 1)))))))
(fact 5))

x)))

Scheme: Listas y Nmeros


Los principales operadores definidos para la
manipulacin de listas son los siguientes:

car retorna la cabeza de la lista.


cdr retorna el resto de la lista.
cons agrega un elemento a la cabecera de la lista.
null? determina si u argumento es la lista vaca.

Tipos Numricos: integer, rational, real, complex,


number.

Scheme: Bsqueda y Pruebas de


Igualdad.
IGUALDAD

eq?
eqv?
equal?

LISTA

memq
memv
member

LISTA DE
ASOCIACIN

assq
assv
assoc

Scheme: Flujo de Control y


Asignaciones.
Una secuencia de
intrucciones al estilo ifelse puede
implementarse con la
funcin cond.

Las asignaciones se
realizan a travs de
los operadores:
set!
set-car!
set-cdr!

Scheme: Secuenciacin e iteracin.


La secuenciacin se
implementa a travs
de begin.
La iteracin hace uso de do en combinacin
con for-each.

Scheme: Programas como listas.


Un programa en Scheme es una lista y por tanto
pueden aplicrsele las mismas operaciones que a
stas.

Scheme: Orden de Evaluacin.

Orden Aplicativo + Pasaje by sharing


Orden Normal + Pasaje Por Nombre
Funcin Estricta.
Evaluacin Perezosa. Efectos de
Borde.
Operadores delay y force

Entrada/Salida, Streams y Monads.


read y display Efectos de borde.
Streams definicin de mecanismos de
entrada y salida.

Monads utilzado por versiones recientes de


Haskell para E/S. [map, interact]

Vous aimerez peut-être aussi