Programación No-Imperativa
-
Upload
rhiannon-briallen -
Category
Documents
-
view
44 -
download
1
description
Transcript of Programación No-Imperativa
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 basadapuramente 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 identidadz = z (x.xג) devuelve z (aplicación de la función identidad al
argumento “z”)
Problema de asociación: El orden de aplicación es a la izquierda
A – B – C
(A – B) - C A – (B – C)
X Y Z
X (Y Z)(X Y) Z
Calculo-גOtros ejemplos básico son:
una función que toma un argumento y retorna algo ( ___ .xג) •a ( x. X + 2ג) • = a + 2 se le aplica la función a el argumento “a”a ( x. 7ג) • = 7 una función constante devuelve la constante
Ya que agarramos un poco la noción vamos con otro ejemplo un pocomás complejo.
(z.wג)(x.xzxxג)(y.yג.x ג)
(y.yג)
(z.wג)
Calculo-ג
If “B” then “T” else “E” • Si B = True devuelve “T”• Si B = False devuelve “E”
Primera = True = (גx.גy.x)Segunda = False = (גx.גy.y)If = (ג a.ג b.גc.abc)
CondiciónBoleana
elsethen
Veamos juntos el formalismo del condicional como podría probarsecon ג-calculo, para ello definimos algunas cosas previamente que hayque tener en cuenta:
Calculo-ג
Si B = False devuelve “E”Si B = True devuelve “T”
If “B” then “T” else “E”
True T E (c.abcג .bג .aג)
(c.True b cג .bג)
(c.True T cג)
True T E
Primero T E
T E (y.xג .xג)
E (y.Tג) = T
False T E (c.abcג .bג .aג)
(c.False b cג .bג)
(c.False T cג)
False T E
Segundo T E
T E (y.yג .xג)
E (y.yג) = E
Calculo-ג
Reglas de reducción:• Beta-reducción • Alpha-reducción
• Beta-reducción F E [X := F] (x.Eג)
(a.baג) b ab(x.axג) “b” esta libre “a” esta ligada
• Alpha-reducción (y.E [ X := Y]ג) F (x.Eג)
β
α
Calculo-ג
Orden deevaluación
Aplicativo: se escoge el “β -redex” más interno y más a la izquierda.
Normal: se escoge el “β -redex” más externo y más a la izquierda.
((z.zג)(y.bycyג))(x.xxaג)
a ((z.zג)(y.bycyג)) ((z.zג)(y.bycyג))
(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
((z.zג)c(z.zג)b)(x.xxaג)
AplicativoNormal β
2 β-reducciones2 β-reducciones
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
Se dice que una función es de alto nivel (también conocidacomo forma funcional) cuando toma una función como
argumento o retorna una función como resultado.
Definición:
Los programadores de scheme, ML, Haskell o cualquier otro lenguajefuncional puede fácilmente definir funciones de alto nivel.
(define fold (lambda (f l i)(if (null? l) i
(f (car l) (fold f (cdr l) i)))))
Ej. Implementación del fold de Haskell en scheme
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ónno currificada se le pasan ambos parámetros al mismo tiempo, en cambioa la versión currificada se le van pasando uno por uno.