Beruflich Dokumente
Kultur Dokumente
Informtica (201112)
2 / 16
Funciones en Haskell
En Haskell, una funcin es una aplicacin que toma uno o ms argumentos y devuelve un valor. En Haskell, las funciones se denen mediante ecuaciones formadas por el nombre de la funcin, los nombres de los argumentos y el cuerpo que especica cmo se calcula el valor a partir de los argumentos. Ejemplo de denicin de funcin en Haskell:
doble x = x + x
Ejemplo de evaluacin: doble 3 = 3+3 [def. de doble] = 6 [def. de +]
3 / 16
Funciones en Haskell
En Haskell, una funcin es una aplicacin que toma uno o ms argumentos y devuelve un valor. En Haskell, las funciones se denen mediante ecuaciones formadas por el nombre de la funcin, los nombres de los argumentos y el cuerpo que especica cmo se calcula el valor a partir de los argumentos. Ejemplo de denicin de funcin en Haskell:
doble x = x + x
Ejemplo de evaluacin: doble 3 = 3+3 [def. de doble] = 6 [def. de +]
3 / 16
4 / 16
4 / 16
Comprobacin de propiedades
Propiedad: El doble de x ms y es el doble de x ms el doble de y Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Comprobacin de propiedades
Propiedad: El doble de x ms y es el doble de x ms el doble de y Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Comprobacin de propiedades
Propiedad: El doble de x ms y es el doble de x ms el doble de y Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Comprobacin de propiedades
Propiedad: El doble de x ms y es el doble de x ms el doble de y Expresin de la propiedad:
import Test.QuickCheck
5 / 16
Refutacin de propiedades
Propiedad: El producto de dos nmeros cualequiera es distinto de su suma. Expresin de la propiedad:
6 / 16
Refutacin de propiedades
Propiedad: El producto de dos nmeros cualequiera es distinto de su suma. Expresin de la propiedad:
6 / 16
Refutacin de propiedades
Propiedad: El producto de dos nmeros cualequiera es distinto de su suma. Expresin de la propiedad:
6 / 16
Refutacin de propiedades
Renamiento: El producto de dos nmeros no nulos cualequiera es distinto de su suma.
7 / 16
Refutacin de propiedades
Renamiento: El producto de dos nmeros no nulos cualequiera es distinto de su suma.
7 / 16
Refutacin de propiedades
Renamiento: El producto de dos nmeros no nulos cualequiera es distinto de su suma.
7 / 16
8 / 16
8 / 16
8 / 16
8 / 16
total 0 1 3 6 10
9 / 16
total 0 1 3 6 10
9 / 16
de de de de
10 / 16
de de de de
10 / 16
11 / 16
Antecedentes histricos
1930s: Alonzo Church desarrolla el lambda clculo (teora bsica de los lenguajes funcionales). 1950s: John McCarthy desarrolla el Lisp (lenguaje funcional con asignaciones). 1960s: Peter Landin desarrolla ISWIN (lenguaje funcional puro). 1970s: John Backus desarrolla FP (lenguaje funcional con orden superior). 1970s: Robin Milner desarrolla ML (lenguaje funcional con tipos polimrcos e inferencia de tipos). 1980s: David Turner desarrolla Miranda (lenguaje funcional perezoso). 1987: Un comit comienza el desarrollo de Haskell. 2003: El comit publica el Haskell Report.
12 / 16
ordena [] = [] ordena (x:xs) = (ordena menores) ++ [x] ++ (ordena mayores) where menores = [a | a <- xs, a <= x] mayores = [b | b <- xs, b > x]
Tipo de ordena: Ord a => [a] -> [a]
14 / 16
ordena [] = [] ordena (x:xs) = (ordena menores) ++ [x] ++ (ordena mayores) where menores = [a | a <- xs, a <= x] mayores = [b | b <- xs, b > x]
Tipo de ordena: Ord a => [a] -> [a]
14 / 16
ordena [] = [] ordena (x:xs) = (ordena menores) ++ [x] ++ (ordena mayores) where menores = [a | a <- xs, a <= x] mayores = [b | b <- xs, b > x]
Tipo de ordena: Ord a => [a] -> [a]
14 / 16
15 / 16
Bibliografa
1. R. Bird. Introduccin a la programacin funcional con Haskell. Prentice Hall, 2000.
Cap. 1: Conceptos fundamentales.
4. B.C. Ruiz, F. Gutirrez, P. Guerrero y J.E. Gallardo. Razonando con Haskell. Thompson, 2004.
Cap. 1: Programacin funcional.
5. S. Thompson. Haskell: The Craft of Functional Programming, Second Edition. Addison-Wesley, 1999.
Cap. 1: Introducing functional programming.
16 / 16