Title: Programaci
1Programación No-Imperativa
- Modelos Lenguajes Funcionales y Lógicos.
2Agenda
- ?- Calculo
- Definición
- Beta Reducciones
- alpha conversión
- Orden de evaluación
- Funciones de alto nivel
- Definición
- Versión Currificada y no Currificada de funciones
3?-Calculo
Definición una notación / modelo computacional
basada puramente en la manipulación de símbolos
sintácticos, en la cual todo es una función.
- Una ?-expresión puede ser
- Variable
- (? variable. Expresión)
- Expresión0 Expresión1
4?-Calculo
f función f (?x.x) función identidad (?x.x) z
z devuelve z (aplicación de la función
identidad al argumento z)
A B C
X Y Z
X (Y Z)
(A B) - C
A (B C)
(X Y) Z
Problema de asociación El orden de aplicación es
a la izquierda
5?-Calculo
- Otros ejemplos básico son
- (?x. ___ ) una función que toma un argumento
y retorna algo - (?x. X 2 ) a a 2 se le aplica la función a
el argumento a - (?x. 7 ) a 7 una función constante devuelve la
constante - Ya que agarramos un poco la noción vamos con otro
ejemplo un poco - más complejo.
(? x.?y.y)(?x.xzxx)(?z.w)
(?y.y)
(?z.w)
6?-Calculo
Veamos juntos el formalismo del condicional como
podría probarse con ?-calculo, para ello
definimos algunas cosas previamente que hay que
tener en cuenta
- Si B True devuelve T
- Si B False devuelve E
If B then T else E
Primera True (?x.?y.x) Segunda False
(?x.?y.y) If (? a.? b.?c.abc)
else
Condición Boleana
then
7?-Calculo
If B then T else E
Si B False devuelve E
Si B True devuelve T
(?a. ?b. ?c.abc) True T E
(?a. ?b. ?c.abc) False T E
(?b. ?c.True b c)
(?b. ?c.False b c)
(?c.True T c)
(?c.False T c)
True T E
False T E
Primero T E
Segundo T E
(?x. ?y.x) T E
(?x. ?y.y) T E
(?y.T) E
T
(?y.y) E
E
8?-Calculo
- Reglas de reducción
- Beta-reducción
- Alpha-reducción
- Beta-reducción (?x.E) F E X F
-
- (?x.ax)b ab (?a.ba) b esta libre
- a esta ligada
ß
- Alpha-reducción (?x.E) F (?y.E X Y)
a
9?-Calculo
Aplicativo se escoge el ß -redex más interno
y más a la izquierda.
Orden de evaluación
Normal se escoge el ß -redex más externo
y más a la izquierda.
(?x.xxa)((?y.bycy)(?z.z))
Normal
Aplicativo
ß
((?y.bycy)(?z.z)) ((?y.bycy)(?z.z)) a
(?x.xxa)(b(?z.z)c(?z.z))
2 ß-reducciones
2 ß-reducciones
(b(?z.z)c(?z.z)) (b(?z.z)c(?z.z)) a
(b(?z.z)c(?z.z)) (b(?z.z)c(?z.z)) a
10?-Calculo
- Teorema
- La forma normal, si existe es una.
- Si la forma normal existe, el orden de evaluación
normal siempre llega a ella.
Ejemplo de un ciclo infinito
(?x.xx)(?x.xx)
(?x.xx)(?x.xx)
No importa si es aplicativo o normal la reduzca
y llega a ella misma.
11Funciones de alto nivel
Definición
Se dice que una función es de alto nivel (también
conocida como forma funcional) cuando toma una
función como argumento o retorna una función
como resultado.
Los programadores de scheme, ML, Haskell o
cualquier otro lenguaje funcional puede
fácilmente definir funciones de alto nivel.
Ej. Implementación del fold de Haskell en scheme
(define fold (lambda (f l i) (if (null? l) i
(f (car l) (fold f (cdr l) i)))))
12Funciones de alto nivel
1.- Versión No Currificada
(define sumaNC (lambda (x y) ( x y) ) )
2.- Versión Currificada
(define sumaC (lambda (x) (lambda (y) ( x y) )
) )
Como se observa en el ejemplo suministrado en
Scheme a la versión no currificada se le pasan
ambos parámetros al mismo tiempo, en cambio a la
versión currificada se le van pasando uno por uno.