Professional Documents
Culture Documents
Programacin Funcional
Introduccin a Haskell
Identificadores
Tipos bsicos
Definiciones de funciones. Aplicaciones
Operadores, precedencia y asociatividad
Evaluacin de expresiones
Tuplas
Polimorfismo y sobrecarga
Ecuaciones condicionales y expresiones
Funciones definidas parcialmente
Definiciones locales
Operadores vs Funciones
Introduccin a QuickCheck
http://en.wikipedia.org/wiki/Imperative_programming
http://en.wikipedia.org/wiki/Functional_programming
funcin
(programa)
nuevos datos
resultado
Nada cambia !
No hay variables
mutables. Tan solo
funciones y expresiones
(Regla de Leibniz)
http://en.wikipedia.org/wiki/Pure_function
siempre devuelve
Si = entonces
La primera llamada
devuelve
La segunda llamada
devuelve
Para el mismo valor del argumento
devuelve diferentes resultados
10
Adems, la expresin
puede evaluarse va paralelismo
12
Principales caractersticas:
Pureza funcional
Tipificacin esttica
Perezoso (Lazy)
13
, etc.
14
15
16
http://en.wikipedia.org/wiki/George_Boole
x y
not primo y
Hay evaluacin en cortocircuito
17
,
,
,
,
, ,
,
18
Introducida por
Moses Schnfinkel (1889-1942)
y popularizada por
Haskell Curry (1900-1982)
http://en.wikipedia.org/wiki/Currying
19
toma un
entero
nombre de
la funcin
argumento
devuelve un
entero
resultado
20
phytagoras se aplica
a los dos argumentos
El segundo argumento es
compuesto y necesita
parntesis
21
22
23
programas Haskell
24
25
El operador unario
simblico prefijo:
26
Mxima precedencia
La aplicacin de una
funcin tiene prioridad
mxima
4
3
2
Mnima precedencia
27
asocia a la izquierda:
Si
asocia a la derecha:
Si
no es asociativo:
Asociatividad
Derecha
Operador
Izquierda
No asociativo
Ejemplos:
Use parntesis si
desconoce la
asociatividad
Expresin errnea
29
El operador
verifica la propiedad asociativa en
sentido matemtico si satisface:
x, y, z . (x y) z = x (y z)
30
infix = no asociativo.
infixl = asociativo a izda
infixr = asociativo a dcha
Nivel de precedencia
El identificador del
operador debe
aparecer entre
parntesis en una
declaracin de tipo
31
forma infija
Error
Si la funcin es asociativa
no son necesarios los
parntesis
32
33
34
es una forma
normal
35
Orden Aplicativo
Contras
Pueden realizarse reducciones
innecesarias.
Puede no conducir a la forma normal
(no es normalizante)
36
Orden Aplicativo
Contras
Pueden realizarse reducciones
innecesarias.
Puede no conducir a la forma normal
(no es normalizante)
37
Orden Normal
Pros
Slo se evalan las expresiones
necesarias.
Siempre conduce a la forma normal si
sta existe (normalizante)
Contras
Puede repetirse la evaluacin de un
argumento compuesto
38
Orden Normal
Pros
Slo se evalan las expresiones
necesarias.
Siempre conduce a la forma normal si
sta existe (normalizante)
Contras
Puede repetirse la evaluacin de un
argumento compuesto
39
valor
compartido
40
Sintaxis:
parntesis
Los tipos de cada componente se separan por comas y
se colocan entre parntesis
41
42
Prelude
Prelude
Patrn de una
2-tupla
Indica una
funcin
predefinida
43
http://en.wikipedia.org/wiki/Type_class
Prelude
tipo sobrecargado
debe ser una
instancia de
; es
decir, debe ser un
tipo numrico
44
suma sobre
Integer
producto sobre
Floating
2 est sobrecargado
Char no es de la clase Num
Type error
45
Prelude
Tipo sobrecargado:
debe ser de la clase
Integral
cociente y resto de la
divisin entera
46
Prelude
Divisin
fraccionaria
10 y 3 estn
sobrecargados
47
48
es la clase de los tipos para los cuales existe una relacin de orden total;
entre stos aparecen Integer, Double, Char, Rational, Bool,
Ciertos operadores (<, max, ) solo tienen sentido para las instancias de
Debe leerse como:
Prelude
Prelude
Prelude
Tipo
enumerado
predefinido
49
es la clase de los tipos para los cuales existe una relacin de igualdad; entre
stos aparecen Integer, Double, Char, Rational, Bool,
La clase incluye dos operadores:
Debe leerse como:
Prelude
50
1 es menor que 2
1 no es igual a 2
1 es distinto de 2
1 es Less Than 2
10 es Greater Than 2
1 es EQual
a 1
52
Su valor es 1, si el
argumento es positivo
Atencin al
sangrado . Los
separadores
en la misma
columna
Su valor es -1, si el
argumento es negativo
Su valor es 0, si el
argumento es nulo
Guardas booleanas
http://en.wikipedia.org/wiki/Guard_(computing)
53
La definicin anterior:
puede escribirse de forma ms corta (estilo preferente):
otherwise: esta condicin
siempre es cierta. Ser
seleccionada si fallan las
previas
Prelude
54
55
error ::
-> a
56
La palabra reservada
permite definir funciones o variables
locales, y debe aparecer al final de la definicin
where: debe
sangrarse con
respecto a la funcin
57
expresin
58
cumplir
QuickCheck genera casos de prueba y verifica las
propiedades para esos casos
59
Propiedades en QuickCheck:
antecedente
consecuente
booleanas
Se debe usar
Algunas propiedades:
.
0.
.|
|
0 . |
| |
| |
|
| |
| |
Hacemos que
QuickCheck pruebe
nuestra propiedad
con enteros
aleatorios
Fallo en la prueba:
contraejemplo
61
Edsger W. Dijkstra
http://en.wikipedia.org/wiki/Edsger_W._Dijkstra