Академический Документы
Профессиональный Документы
Культура Документы
Informtica (201516)
2 / 16
Funciones en Haskell
I
doble x = x + x
I
Ejemplo de evaluacin:
doble 3
= 3+3
[def. de doble]
= 6
[def. de +]
3 / 16
Funciones en Haskell
I
doble x = x + x
I
Ejemplo de evaluacin:
doble 3
= 3+3
[def. de doble]
= 6
[def. de +]
3 / 16
4 / 16
4 / 16
Comprobacin de propiedades
I
Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Comprobacin de propiedades
I
Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Comprobacin de propiedades
I
Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Comprobacin de propiedades
I
Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Refutacin de propiedades
I
Expresin de la propiedad:
6 / 16
Refutacin de propiedades
I
Expresin de la propiedad:
6 / 16
Refutacin de propiedades
I
Expresin de la propiedad:
6 / 16
Refutacin de propiedades
I
prop_prod_suma' x y =
x /= 0 && y /= 0 ==> x*y /= x+y
I
7 / 16
Refutacin de propiedades
I
prop_prod_suma' x y =
x /= 0 && y /= 0 ==> x*y /= x+y
I
7 / 16
Refutacin de propiedades
I
prop_prod_suma' x y =
x /= 0 && y /= 0 ==> x*y /= x+y
I
7 / 16
8 / 16
8 / 16
8 / 16
8 / 16
Programa suma n:
contador := 0
total := 0
repetir
contador := contador + 1
total := total + contador
hasta que contador = n
Evaluacin de suma 4:
contador
0
1
2
3
4
total
0
1
3
6
10
9 / 16
Programa suma n:
contador := 0
total := 0
repetir
contador := contador + 1
total := total + contador
hasta que contador = n
Evaluacin de suma 4:
contador
0
1
2
3
4
total
0
1
3
6
10
9 / 16
Programa:
Evaluacin de suma 4:
suma 4
= sum [1..4]
= sum [1, 2, 3, 4]
= 1+2+3+4
= 10
[def.
[def.
[def.
[def.
de
de
de
de
suma]
[..]]
sum]
+]
10 / 16
Programa:
Evaluacin de suma 4:
suma 4
= sum [1..4]
= sum [1, 2, 3, 4]
= 1+2+3+4
= 10
[def.
[def.
[def.
[def.
de
de
de
de
suma]
[..]]
sum]
+]
10 / 16
Programas concisos.
Funciones recursivas.
Evaluacin perezosa.
Efectos mondicos.
11 / 16
Antecedentes histricos
I
I
I
I
I
sum []
= 0
sum (x:xs) = x + sum xs
I
Evaluacin:
sum [2,3,7]
= 2 + sum [3,7]
[def. de
= 2 + (3 + sum [7])
[def. de
= 2 + (3 + (7 + sum [])) [def. de
= 2 + (3 + (7 + 0))
[def. de
= 12
[def. de
Tipo de sum: (Num a) => [a] -> a
sum]
sum]
sum]
sum]
+]
13 / 16
sum []
= 0
sum (x:xs) = x + sum xs
I
Evaluacin:
sum [2,3,7]
= 2 + sum [3,7]
[def. de
= 2 + (3 + sum [7])
[def. de
= 2 + (3 + (7 + sum [])) [def. de
= 2 + (3 + (7 + 0))
[def. de
= 12
[def. de
Tipo de sum: (Num a) => [a] -> a
sum]
sum]
sum]
sum]
+]
13 / 16
sum []
= 0
sum (x:xs) = x + sum xs
I
Evaluacin:
sum [2,3,7]
= 2 + sum [3,7]
[def. de
= 2 + (3 + sum [7])
[def. de
= 2 + (3 + (7 + sum [])) [def. de
= 2 + (3 + (7 + 0))
[def. de
= 12
[def. de
Tipo de sum: (Num a) => [a] -> a
sum]
sum]
sum]
sum]
+]
13 / 16
sum []
= 0
sum (x:xs) = x + sum xs
I
Evaluacin:
sum [2,3,7]
= 2 + sum [3,7]
[def. de
= 2 + (3 + sum [7])
[def. de
= 2 + (3 + (7 + sum [])) [def. de
= 2 + (3 + (7 + 0))
[def. de
= 12
[def. de
Tipo de sum: (Num a) => [a] -> a
sum]
sum]
sum]
sum]
+]
13 / 16
ordena [] = []
ordena (x:xs) =
(ordena menores) ++ [x] ++ (ordena mayores)
where menores = [a | a <- xs, a <= x]
mayores = [b | b <- xs, b > x]
I
ordena [] = []
ordena (x:xs) =
(ordena menores) ++ [x] ++ (ordena mayores)
where menores = [a | a <- xs, a <= x]
mayores = [b | b <- xs, b > x]
I
ordena [] = []
ordena (x:xs) =
(ordena menores) ++ [x] ++ (ordena mayores)
where menores = [a | a <- xs, a <= x]
mayores = [b | b <- xs, b > x]
I
ordena [4,6,2,3]
(ordena [2,3]) ++ [4] ++ (ordena [6])
((ordena []) ++ [2] ++ (ordena [3])) ++ [4] ++ (ordena [6])
([] ++ [2] ++ (ordena [3])) ++ [4] ++ (ordena [6])
([2] ++ (ordena [3])) ++ [4] ++ (ordena [6,5])
([2] ++ ((ordena []) ++ [3] ++ [])) ++ [4] ++ (ordena [6])
([2] ++ ([] ++ [3] ++ [])) ++ [4] ++ (ordena [6])
([2] ++ [3]) ++ [4] ++ (ordena [6])
[2,3] ++ [4] ++ (ordena [6])
[2,3,4] ++ (ordena [6])
[2,3,4] ++ ((ordena []) ++ [6] ++ (ordena []))
[2,3,4] ++ ((ordena []) ++ [6] ++ (ordena []))
[2,3,4] ++ ([] ++ [6] ++ [])
[2,3,4,6]
[def.
[def.
[def.
[def.
[def.
[def.
[def.
[def.
[def.
[def.
[def.
[def.
[def.
ordena]
ordena]
ordena]
++]
ordena]
ordena]
++]
++]
++]
ordena]
ordena]
ordena]
++]
15 / 16
Bibliografa
1. R. Bird. Introduccin a la programacin funcional con Haskell.
Prentice Hall, 2000.
I
Cap. 1: Introduction.