FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Tema 1: Programacion Funcional
A. Chavez-Gonzalez1 A. Riscos-Nunez1 F. Sancho-Caparrini1
1Departamento de Ciencias de la Computacion e Inteligencia ArtificialUniversidad de Sevilla
http://www.cs.us.es/cursos/lp/
Logica y Programacion, 2006/07
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Indice
1 Funciones
2 Sesiones y declaraciones
3 Reduccion de expresionesEjemploTransparencia referencialOrdenes de reduccion aplicativo y normalEvaluacion perezosa
4 Sobre Haskell
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Funciones
Una funcion f es una correspondencia entre dos conjuntos inicialy final
f : A→ B
f(x) 7−→ . . .
Ejemplos:sucesor, sumaCuadrados (2 argumentos) y pi (constante)
sumaCuadrados : Z× Z→ Z
sumaCuadrados(x, y) 7→ x2 + y 2
Interesa evaluar la funcion para ciertos valores: ”El resultado deaplicar la funcion f al valor x es y”
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Indice
1 Funciones
2 Sesiones y declaraciones
3 Reduccion de expresionesEjemploTransparencia referencialOrdenes de reduccion aplicativo y normalEvaluacion perezosa
4 Sobre Haskell
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Sesiones y declaraciones
Programar es dar al ordenador los pasos para resolver unproblema
La solucion se calcula a partir de los datos, luego un programase describe mediante funciones
Programacion funcional: ordenador = evaluador
Prelude>
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Ejemplos
Prelude> 1 + 23 :: Integer
Prelude> cos (2 * pi)1.0 :: Double
Prelude> [1 . . . 5][1, 2, 3, 4, 5] :: [Integer]
Prelude> mod 10 31 :: Integer
Prelude> mod 10 (3 + 1)2 :: Integer
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Sesiones con Haskell
Haskell es un lenguaje fuertemente tipificado. El conjuntode valores, funciones y operadores predefinidos es ampliable,incluso se pueden definir nuevos tipos de datos
sucesor :: Integer -> Integersucesor x = x + 1
Declaracion de tipo, ecuacion, metodo de computo, parametroformal de la funcion
Una funcion de dos argumentossumaCuadrados :: Integer→ Integer→ IntegersumaCuadrados x y = x ∗ x + y ∗ y
Main> sumaCuadrados (2 + 2) 325 :: Integer
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Indice
1 Funciones
2 Sesiones y declaraciones
3 Reduccion de expresionesEjemploTransparencia referencialOrdenes de reduccion aplicativo y normalEvaluacion perezosa
4 Sobre Haskell
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Reduccion I
El evaluador simplifica la expresion y muestra el resultadocuadrado :: Integer→ Integercuadrado x = x ∗ x
Simplificacion en varios pasos de reduccion2 + cuadrado3=⇒ ! por la definicion de cuadrado2 + 3 ∗ 3=⇒ ! por el operador (∗)2 + 9=⇒ ! por el operador (+)11
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Reduccion II
El evaluador simplifica la expresion y muestra el resultado
Simplificacion en varios pasos de reducccion
Un redex es cada parte de la expresion que pueda reducirse
Forma normal
Evaluador: mientras quede algun redex, reducir; cuandoalcance la forma normal, mostrar el resultado
Pero, ¿Que ocurre si hay mas de un redex?
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Ejemplo
Reduccion desde dentro Reduccion desde fueracuadrado(cuadrado3) cuadrado(cuadrado3)=⇒ ! por la definicion de cuadrado =⇒ ! por la definicion de cuadradocuadrado(3 ∗ 3) (cuadrado 3) ∗ (cuadrado 3)=⇒ ! por el operador (∗) =⇒ ! por la definicion de cuadradocuadrado 9 (3 ∗ 3) ∗ (cuadrado 3)=⇒ ! por la definicion de cuadrado =⇒ ! por el operador (∗)9 ∗ 9 9 ∗ (cuadrado 3)=⇒ ! por el operador (∗) =⇒ ! por la definicion de cuadrado81 9 ∗ (3 ∗ 3)
=⇒ ! por el operador (∗)9 ∗ 9=⇒ ! por el operador (∗)81
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Funciones estrictas y transparecia referencial
Las funciones que para ser evaluadas necesitan que susparametros esten en forma normal se llaman estrictas.Ejs.: ∗ es estricto. cuadrado no es estricto.
Sea cual sea el orden de reduccion, el resultado final es elmismo. La reduccion cambia la forma de una expresion, no suvalor
La transparencia referencial establece que una mismaexpresion denota siempre el mismo valor
Si aparecen varios redexes, podemos elegir cualquiera sin que elresultado varıe. Pero la eleccion del redex equivocado puede noconducir a la forma normal
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Ejemplo
infinito :: Integer cero :: Integer→ Integerinfinito = 1 + infinito cero x = 0
Reduccion desde dentro Reduccion desde fueracero infinito cero infinito=⇒ ! por la definicion de infinito =⇒ ! por la definicion de cerocero (1 + infinito) 0=⇒ ! por la definicion de infinitocero(1 + (1 + infinito))=⇒ ! por la definicion de infinito. . .
La estrategia utilizada para seleccionar el redex es crucial
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Un orden de reduccion es una estrategia que indica que redexhay que seleccionar en cada paso de reduccion
Orden de reduccion aplicativo
Seleccionar siempre el redex mas interno y mas a la izquierda
paso de parametros por valor (call by value)
Evaluadores estrictos o impacientes
Problema: A veces se efectuan reducciones innecesarias
cero(10 ∗ 4)=⇒ ! por el operador (∗)cero 40=⇒ ! por la definicion de cero0
cero infinito
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Un orden de reduccion es una estrategia que indica que redexhay que seleccionar en cada paso de reduccion
Orden de reduccion aplicativo
Seleccionar siempre el redex mas interno y mas a la izquierda
paso de parametros por valor (call by value)
Evaluadores estrictos o impacientes
Problema: A veces se efectuan reducciones innecesarias
cero(10 ∗ 4)=⇒ ! por el operador (∗)cero 40=⇒ ! por la definicion de cero0
cero infinito
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Un orden de reduccion es una estrategia que indica que redexhay que seleccionar en cada paso de reduccion
Orden de reduccion aplicativo
Seleccionar siempre el redex mas interno y mas a la izquierda
paso de parametros por valor (call by value)
Evaluadores estrictos o impacientes
Problema: A veces se efectuan reducciones innecesarias
cero(10 ∗ 4)=⇒ ! por el operador (∗)cero 40=⇒ ! por la definicion de cero0
cero infinito
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Orden de reduccion normal
Seleccionar siempre el redex mas externo y mas a la izquierda
paso de parametros por nombre (call by name)
Evaluadores no estrictos
Es normalizante
Problema: Ciertas expresiones se reducen varias veces
Ejemplo:cuadrado(cuadrado3)
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Orden de reduccion normal
Seleccionar siempre el redex mas externo y mas a la izquierda
paso de parametros por nombre (call by name)
Evaluadores no estrictos
Es normalizante
Problema: Ciertas expresiones se reducen varias veces
Ejemplo:cuadrado(cuadrado3)
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Evaluacion perezosa
Orden normal (paso por nombre): expresiones se reducenvarias veces
Solucion: Evaluacion perezosa (call by need)Consiste en utilizar paso por nombre y recordar los valores delos argumentos ya calculados para evitar recalculo
No se utilizan mas reducciones que con paso por valor, luegono es menos eficiente que ella y tiene las ventajas de paso pornombre.
Haskell utiliza un evaluador perezoso
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Evaluacion perezosa: Ejemplo
cuadrado(cuadrado3)=⇒ ! por la definicion de cuadradoa ∗ a donde a = cuadrado3=⇒ ! por la definicion de cuadradoa ∗ a donde a = b ∗ b donde b = 3=⇒ ! por el operador (∗)a ∗ a donde a = 9=⇒ ! por el operador (∗)81
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Representacion perezosa de la funcion cuadrado
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
EjemploTransparencia referencialOrdenes de reduccionEvaluacion perezosa
Reduccion perezosa de la funcion cuadrado
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Indice
1 Funciones
2 Sesiones y declaraciones
3 Reduccion de expresionesEjemploTransparencia referencialOrdenes de reduccion aplicativo y normalEvaluacion perezosa
4 Sobre Haskell
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1
FuncionesSesiones y declaraciones
ReduccionSobre Haskell
Version estable del lenguaje Haskell denominadaHaskell 98
Peyton Jones, 2003. Haskell 98 Language and Libraries. TheRevised Report. Cambridge University Press
Peyton Jones y Hughes, 2002. Standard Libraries for Haskell98. En http://haskell.org/onlinelibrary
Hugs 98 es una de las implementaciones mas populares paraHaskell 98
http://haskell.org/hugs
Mas informacion sobre Haskell: http://haskell.org
Antonia Chavez, Agustın Riscos, Fernando Sancho Tema 1