Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
atica
Haskell
Matem
aticas Curso 2004-2005
Temario
1 Introducci
on y sem
antica operacional
2 Tipos predefinidos
3 Patrones y Definiciones de Funciones
4 Funciones de orden superior
5 Polimorfismo
6 Definiciones de tipos
7 El sistema de clases
8 Listas
rboles
9 A
10 Razonamiento ecuacional
Bibliografa
X Razonando con Haskell. Un curso sobre programaci
on funcional. Blas
Ruiz, Francisco Guti
errez, Pablo Guerrero y Jos
e Gallardo. Thomson,
2004. (http://www.lcc.uma.es/RazonandoConHaskell)
X Introduction to Functional Programming using Haskell. Richard Bird.
Prentice Hall, 1998.
X The Haskell School of Expression. Learning Functional Programming
through multimedia. Paul Hudak. Cambridge University Press, 2000.
X Haskell. The Craft of Functional Programming. Simon Thompson.
Addison-Wesley, 1999.
Profesor
Pepe Gallardo.
Despacho 3.2.50.
pepeg@lcc.uma.es
Web asignatura
http://www.lcc.uma.es/pepeg/mates
Inform
atica
Haskell
Matem
aticas Curso 2004-2005
Tema 1. Introducci
on y sem
antica operacional
1.1 Programacion Funcional
1.2 El lenguaje Haskell
1.3 La notacion Currificada
Aplicacion de funciones
Definicion de funciones
1.4 Sesiones y declaraciones
1.5 Reduccion de expresiones
Orden de reduccion aplicativo
Orden de reduccion normal
Evaluacion Perezosa
1.1 Programaci
on Funcional
X Programar: especificar c
omo resolver un problema.
X Un modo natural de describir programas es mediante funciones.
X El estilo funcional est
a basado en expresiones:
Un programa es un conjunto de definiciones de funciones matem
aticas
El programador define funciones
El ordenador eval
ua la expresi
on
X Ventajas:
Permite escribir programas claros, concisos y con alto nivel de
abstracci
on
Soporta Software reusable
Facilita el uso de la verificaci
on formal
Usaremos Haskell 98
http://haskell.org
Inform
atica Pepe Gallardo Universidad de M
alaga
1.1
X Puro:
Una misma expresi
on denota siempre el mismo valor (Transparencia referencial).
Verificaci
on formal relativamente f
acil.
X No estricto:
El orden utilizado para reducir expresiones es normal.
Las implementaciones de Haskell suelen usar evaluaci
on perezosa.
Permite trabajar con estructuras infinitas.
X Fuertemente tipado:
Cada elemento tiene un tipo.
Se usa para comprobar el uso consistente de los elementos.
Usos inconsistentes dan lugar a errores de tipo.
Muchos errores se detectan pronto.
Inform
atica Pepe Gallardo Universidad de M
alaga
1.2
1.3 La notaci
on Currificada
Aplicaci
on de funciones
X En Matem
aticas la aplicaci
on de funciones es denotada usando par
entesis:
f (a, b) + c d
aplicar la funci
on f a los argumentos a y b
X En Haskell la aplicaci
on de funciones es denotada usando espacios
(notaci
on currificada):
f a b + cd
aplicar la funci
on f a los argumentos a y b
X En Haskell la aplicaci
on de funciones tiene prioridad m
axima:
ga + b
significa (g a ) + b y NO g (a + b )
aplicar la funci
on f a dos args: (a + b ) y c
Ejemplos:
Matem
aticas
Haskell
g (x)
g x
f (x, y)
f x y
g (f (x, y))
g (f x y)
f (x, g (y))
f x (g y)
g (x + y)
g (x + y)
g (x) + y
g x+y
Inform
atica Pepe Gallardo Universidad de M
alaga
1.3
Definici
on de funciones
X Se usa tambi
en la notaci
on currificada:
Un comentario
g
:: Integer Integer
gx = x + 1
f
:: Integer Integer Integer
f x y = x + y + 2
doble
:: Integer Integer
doble x = x + x
cuadruple
:: Integer Integer
cuadruple x = doble (doble x )
Significado:
0
tiene tipo Tipo Arg 1
nombre fun
z}|{
z}|{ z }| {
f
f
x
y
|{z} |{z}
|{z}
0
Tipo Arg 20
z }| {
Tipo Res
z }| {
par . 20 se define
| {z }
resultado
X Nombres de funci
on: comienzan por min
uscula
f
f0
fun 3
fun 3
X Nombres de par
ametros: comienzan por min
uscula
x
x0
x1
xs
Bool
Char
Inform
atica Pepe Gallardo Universidad de M
alaga
1.4
Inform
atica Pepe Gallardo Universidad de M
alaga
1.5
sucesor
:: Integer Integer
sucesor x = x + 1
Tras proporcionar la declaraci
on de funci
on anterior al evaluador:
? sucesor 3
4 :: Integer
? 10 sucesor 3
40 :: Integer
Una funci
on de dos argumentos:
sumaCuadrados
:: Integer Integer Integer
sumaCuadrados x y = x x + y y
? sumaCuadrados 2 (sucesor 3)
20 :: Integer
? sumaCuadrados (2 + 2) 3
25 :: Integer
Inform
atica Pepe Gallardo Universidad de M
alaga
1.6
1.5 Reducci
on de expresiones
El evaluador calcula el resultado de una expresi
on utilizando las definiciones de las funciones involucradas.
Ejemplo
cuadrado
:: Integer Integer
cuadrado x = x x
2 + cuadrado 3
===> {por la definici
on de cuadrado}
2 + (3 3)
===> {por el operador ()}
2 + 9
===> {por el operador (+)}
11
Inform
atica Pepe Gallardo Universidad de M
alaga
1.7
Reducci
on desde dentro hacia fuera
La definici
on del comportamiento del evaluador dada es ambigua.
Qu
e pasa cuando hay m
as de un redex?
cuadrado
:: Integer Integer
cuadrado x = x x
cuadrado (cuadrado 3)
===> {por la definici
on de cuadrado}
cuadrado (3 3)
===> {por el operador ()}
cuadrado 9
===> {por la definici
on de cuadrado}
99
===> {por el operador ()}
81
Inform
atica Pepe Gallardo Universidad de M
alaga
1.8
Reducci
on desde fuera hacia dentro
Reducir la expresi
on desde fuera hacia dentro (reducir primero los reductos menos anidados).
La definici
on de la funci
on cuadrado
cuadrado
:: Integer Integer
cuadrado x = x x
puede ser vista como una regla de reescritura:
cuadrado
===>
Observaci
on: los operadores aritm
eticos son estrictos.
Inform
atica Pepe Gallardo Universidad de M
alaga
1.9
infinito :: Integer
infinito = 1 + infinito
cero
:: Integer Integer
cero x = 0
Comportamiento esperado n :: Integer . cero n ===> 0.
Si reducimos siempre el redex m
as interno:
1.10
Orden de reducci
on aplicativo
X Seleccionar en cada reducci
on el redex m
as interno (el m
as anidado).
X En caso de que existan varios reductos que cumplan la condici
on anterior, se selecciona el que aparece m
as a la izquierda en la expresi
on.
Esto significa que
X A veces, se efect
uan reducciones que no son necesarias:
cero (10 4)
===> {por el operador ()}
cero 40
===> {por definici
on de cero}
0
Inform
atica Pepe Gallardo Universidad de M
alaga
1.11
Orden de reducci
on normal
X Seleccionar el redex m
as externo (menos anidado)
X En caso de conflicto, de entre los m
as externos el que aparece m
as a
on.
la izquierda de la expresi
Esto significa que
X Es normalizante: si la expresi
on tiene forma normal, una reducci
on
mediante este orden la alcanza. (Teorema de estandarizaci
on).
X Un evaluador no estricto solo reducir
a aquellos reductos que son necesarios para calcular el resultado final.
Problema:
X La reducci
on de los argumentos puede repetirse (menor eficiencia).
cuadrado(cuadrado 3)
===> {por la definici
on de cuadrado}
(cuadrado 3) (cuadrado 3)
===> {por la definici
on de cuadrado}
(3 3) (cuadrado 3)
===> {por la definici
on de ()}
9 (cuadrado 3)
===> {por la definici
on de cuadrado}
9 (3 3)
===> {por el operador ()}
9 9
===> {por el operador ()}
81
Inform
atica Pepe Gallardo Universidad de M
alaga
1.12
Evaluaci
on Perezosa
La Evaluaci
on perezosa soluciona este problema.
Evaluaci
on perezosa = paso por nombre + recordar los valores de los
argumentos ya calculados (evita que el c
alculo se repita)
Cada expresi
on se representa mediante un grafo.
cuadrado cuadrado 3
===>
-cuadrado 3
81
- 9
- 3
La reducci
on de la figura la escribiremos como:
cuadrado (cuadrado 3)
===> {por la definici
on de cuadrado}
a a donde a = cuadrado 3
===> {por la definici
on de cuadrado}
a a donde a = b b donde b = 3
===> {por el operador ()}
a a donde a = 9
===> {por el operador ()}
81
No se realizar
an m
as reducciones que utilizando paso por valor.
Posee las ventajas del paso por nombre y no es menos eficiente que el
paso por valor.
Inform
atica Pepe Gallardo Universidad de M
alaga
1.13
Inform
atica Pepe Gallardo Universidad de M
alaga
1.14