programación no-imperativa

12
Programación No- Imperativa Modelos: Lenguajes Funcionales y Lógicos.

Upload: rhiannon-briallen

Post on 13-Mar-2016

44 views

Category:

Documents


1 download

DESCRIPTION

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. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programación No-Imperativa

Programación No-Imperativa

Modelos: Lenguajes Funcionales y Lógicos.

Page 2: Programación No-Imperativa

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

Page 3: Programación No-Imperativa

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

Page 4: Programación No-Imperativa

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

Page 5: Programación No-Imperativa

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ג)

Page 6: Programación No-Imperativa

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:

Page 7: Programación No-Imperativa

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

Page 8: Programación No-Imperativa

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ג)

β

α

Page 9: Programación No-Imperativa

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

Page 10: Programación No-Imperativa

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.

Page 11: Programación No-Imperativa

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

Page 12: Programación No-Imperativa

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.