Está en la página 1de 24

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Tema 1: Programaci on Funcional


A. Ch avez-Gonz alez1
1 Departamento

A. Riscos-N un ez1 F. Sancho-Caparrini1

de Ciencias de la Computaci on e Inteligencia Articial Universidad de Sevilla http://www.cs.us.es/cursos/lp/

L ogica y Programaci on, 2006/07

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

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

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

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>

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Sesiones con Haskell


Haskell es un lenguaje fuertemente tipicado. El conjunto de valores, funciones y operadores predenidos es ampliable, incluso se pueden denir nuevos tipos de datos sucesor :: Integer -> Integer sucesor x = x + 1 Declaraci on de tipo, ecuaci on, m etodo de c omputo, par ametro formal de la funci on Una funci on de dos argumentos sumaCuadrados :: Integer Integer Integer sumaCuadrados x y = x x + y y Main> sumaCuadrados (2 + 2) 3 25 :: Integer
Antonia Ch avez, Agust n Riscos, Fernando Sancho Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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?

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

Funciones estrictas y transparecia referencial


Las funciones que para ser evaluadas necesitan que sus par ametros est en en forma normal se llaman estrictas. Ejs.: es estricto. cuadrado no es estricto. Sea cual sea el orden de reducci on, el resultado nal es el mismo. La reducci on cambia la forma de una expresi on, no su valor La transparencia referencial establece que una misma expresi on denota siempre el mismo valor Si aparecen varios redexes, podemos elegir cualquiera sin que el resultado var e. Pero la elecci on del redex equivocado puede no conducir a la forma normal
Antonia Ch avez, Agust n Riscos, Fernando Sancho Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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 )

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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 )

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

Evaluaci on perezosa: Ejemplo

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

Representaci on perezosa de la funci on cuadrado

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

Ejemplo Transparencia referencial Ordenes de reducci on Evaluaci on perezosa

Reducci on perezosa de la funci on cuadrado

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

Funciones Sesiones y declaraciones Reducci on Sobre Haskell

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

Antonia Ch avez, Agust n Riscos, Fernando Sancho

Tema 1

También podría gustarte