120 likes | 249 Views
Programación No-Imperativa. Modelos: Lenguajes Funcionales y Lógicos. Agenda. ג - 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. ג -Calculo.
E N D
Programación No-Imperativa Modelos: Lenguajes Funcionales y Lógicos.
Agenda • ג- 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
ג-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
ג-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) (X Y) Z A – (B – C) (A – B) - C Problema de asociación: El orden de aplicación es a la izquierda
ג-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)
ג-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
ג-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 (גy.y) E = T = E
ג-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]) α
ג-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
ג-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.
Funciones 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)))))
Funciones 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.