Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 1
Indice
Funciones Sesiones y declaraciones Reducci on de expresiones Ejemplo Transparencia referencial Ordenes de reducci on aplicativo y normal Evaluaci on perezosa Sobre Haskell
1 2 3
Tema 1
Funciones
Una funci on f es una correspondencia entre dos conjuntos inicial y nal f:AB f(x) . . . Ejemplos: sucesor, sumaCuadrados (2 argumentos) y pi (constante) sumaCuadrados : Z Z Z sumaCuadrados(x, y) x 2 + y 2 Interesa evaluar la funci on para ciertos valores: El resultado de aplicar la funci on f al valor x es y
Antonia Ch avez, Agust n Riscos, Fernando Sancho Tema 1
Indice
Funciones Sesiones y declaraciones Reducci on de expresiones Ejemplo Transparencia referencial Ordenes de reducci on aplicativo y normal Evaluaci on perezosa Sobre Haskell
1 2 3
Tema 1
Sesiones y declaraciones
Programar es dar al ordenador los pasos para resolver un problema La soluci on se calcula a partir de los datos, luego un programa se describe mediante funciones Programaci on funcional: ordenador = evaluador Prelude>
Tema 1
Ejemplos
Prelude> 1 + 2 3 :: Integer Prelude> cos (2 * pi) 1.0 :: Double Prelude> [1 . . . 5] [1, 2, 3, 4, 5] :: [Integer] Prelude> mod 10 3 1 :: Integer Prelude> mod 10 (3 + 1) 2 :: Integer
Tema 1
Indice
Funciones Sesiones y declaraciones Reducci on de expresiones Ejemplo Transparencia referencial Ordenes de reducci on aplicativo y normal Evaluaci on perezosa Sobre Haskell
1 2 3
Tema 1
Reducci on I
El evaluador simplica la expresi on y muestra el resultado cuadrado :: Integer Integer cuadrado x = x x Simplicaci on en varios pasos de reducci on 2 + cuadrado3 = ! por la denici on de cuadrado 2+33 = ! por el operador () 2+9 = ! por el operador (+) 11
Tema 1
Reducci on II
El evaluador simplica la expresi on y muestra el resultado Simplicaci on en varios pasos de reduccci on Un redex es cada parte de la expresi on que pueda reducirse Forma normal Evaluador: mientras quede alg un redex, reducir; cuando alcance la forma normal, mostrar el resultado Pero, Qu e ocurre si hay m as de un redex?
Tema 1
Ejemplo
Reducci on desde dentro cuadrado (cuadrado3 ) = ! por la denici on de cuadrado cuadrado (3 3) = ! por el operador () cuadrado 9 = ! por la denici on de cuadrado 99 = ! por el operador () 81 Reducci on desde fuera cuadrado (cuadrado3 ) = ! por la denici on de cuadrado (cuadrado 3) (cuadrado 3) = ! por la denici on de cuadrado (3 3) (cuadrado 3) = ! por el operador () 9 (cuadrado 3) = ! por la denici on de cuadrado 9 (3 3) = ! por el operador () 99 = ! por el operador () 81
Tema 1
Ejemplo
innito :: Integer cero :: Integer Integer innito = 1 + innito cero x = 0 Reducci on desde dentro Reducci on desde fuera cero innito cero innito = ! por la denici on de innito = ! por la denici on de cero cero (1 + innito) 0 = ! por la denici on de innito cero (1 + (1 + innito)) = ! por la denici on de innito ... La estrategia utilizada para seleccionar el redex es crucial
Tema 1
Un orden de reducci on es una estrategia que indica qu e redex hay que seleccionar en cada paso de reducci on Orden de reducci on aplicativo Seleccionar siempre el redex m as interno y m as a la izquierda paso de par ametros por valor (call by value) Evaluadores estrictos o impacientes Problema: A veces se efect uan reducciones innecesarias cero (10 4) = ! por el operador () cero 40 = ! por la denici on de cero 0 cero innito
Antonia Ch avez, Agust n Riscos, Fernando Sancho Tema 1
Un orden de reducci on es una estrategia que indica qu e redex hay que seleccionar en cada paso de reducci on Orden de reducci on aplicativo Seleccionar siempre el redex m as interno y m as a la izquierda paso de par ametros por valor (call by value) Evaluadores estrictos o impacientes Problema: A veces se efect uan reducciones innecesarias cero (10 4) = ! por el operador () cero 40 = ! por la denici on de cero 0 cero innito
Antonia Ch avez, Agust n Riscos, Fernando Sancho Tema 1
Un orden de reducci on es una estrategia que indica qu e redex hay que seleccionar en cada paso de reducci on Orden de reducci on aplicativo Seleccionar siempre el redex m as interno y m as a la izquierda paso de par ametros por valor (call by value) Evaluadores estrictos o impacientes Problema: A veces se efect uan reducciones innecesarias cero (10 4) = ! por el operador () cero 40 = ! por la denici on de cero 0 cero innito
Antonia Ch avez, Agust n Riscos, Fernando Sancho Tema 1
Orden de reducci on normal Seleccionar siempre el redex m as externo y m as a la izquierda paso de par ametros por nombre (call by name) Evaluadores no estrictos Es normalizante Problema: Ciertas expresiones se reducen varias veces Ejemplo: cuadrado (cuadrado3 )
Tema 1
Orden de reducci on normal Seleccionar siempre el redex m as externo y m as a la izquierda paso de par ametros por nombre (call by name) Evaluadores no estrictos Es normalizante Problema: Ciertas expresiones se reducen varias veces Ejemplo: cuadrado (cuadrado3 )
Tema 1
Evaluaci on perezosa Orden normal (paso por nombre): expresiones se reducen varias veces Soluci on: Evaluaci on perezosa (call by need) Consiste en utilizar paso por nombre y recordar los valores de los argumentos ya calculados para evitar rec alculo No se utilizan m as reducciones que con paso por valor, luego no es menos eciente que ella y tiene las ventajas de paso por nombre. Haskell utiliza un evaluador perezoso
Tema 1
cuadrado (cuadrado3 ) = ! por la denici on de cuadrado a a donde a = cuadrado3 = ! por la denici on de cuadrado a a donde a = b b donde b = 3 = ! por el operador () a a donde a = 9 = ! por el operador () 81
Tema 1
Tema 1
Tema 1
Indice
Funciones Sesiones y declaraciones Reducci on de expresiones Ejemplo Transparencia referencial Ordenes de reducci on aplicativo y normal Evaluaci on perezosa Sobre Haskell
1 2 3
Tema 1
Versi on estable del lenguaje Haskell denominada Haskell 98 Peyton Jones, 2003. Haskell 98 Language and Libraries. The Revised Report. Cambridge University Press Peyton Jones y Hughes, 2002. Standard Libraries for Haskell 98. En http://haskell.org/onlinelibrary Hugs 98 es una de las implementaciones m as populares para Haskell 98 http://haskell.org/hugs M as informaci on sobre Haskell: http://haskell.org
Tema 1