1 / 12

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.

Download Presentation

Programación No-Imperativa

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

  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) (X Y) Z A – (B – C) (A – B) - C 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 (גy.y) E = T = 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]) α

  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.

  11. 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)))))

  12. 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.

More Related