Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Definiciones
Compilador : es un programa que traduce el cdigo fuente escrito en un cierto lenguaje de
programacin a cdigo de maquina para alguna arquitectura particular (ejecutable). El cdigo
generado por un compilador puede ejecutarse repetidas veces sin necesidad de volver a compilase;
si es necesario hacer algn cambio en el cdigo fuente, el programa debe recompilarse para crear un
nuevo ejecutable que incluya los cambios.
Intrprete: es un programa que "lee" el cdigo fuente y lo ejecuta pero a diferencia de un
compiador, el intrprete no genera ningn cdigo ejecutable. En el caso particular de Haskell existe
tanto un compilador com un intrprete de Haskell.
Ciclo edicin-interpretacin
Con el interpretador Haskell, usamos el ciclo siguiente:
1. editar cdigo (:e desde ghci o en una consola/ventana aparte)
2. interpretarlo en ghci (:l o :r)
3. volver a 1.
Probar hacerlo sin usar el mouse.
Repaso Haskell
Haskell es un lenguaje funcional: un programa es una expresin, que se ejecuta mediante su
evaluacin
Importa ms el qu que el cmo
Pequea maquinita de evaluar expresiones
Puede ser interpretado (ghci) y compilado (ghc)
Diferencias:
aplicacin de funcin
tipos
constructor de lista
signatura / prototipo de una funcin
a Num corresponden varios tipos posibles en Haskell (Int, Integer, Float...)
Las variables de tipos empiezan con mayscula en el formalismo bsico,\ y con minsculas en
Haskell.
Repaso Haskell
Partes de la definicin de una funcin:
func :: (Eq a, Ord a) => [a] -> [b]
func xs = ...
-- signatura
-- definicin
Ms detallado:
func :: (Eq a, Ord a)
-- contexto (clases de tipos)
=> [a] -> [b]
-- tipo
func xs {- argumento -}
= ... {- cuerpo de la funcion -}
Tipos
Indicados por nosotros
Inferidos por Haskell
Tipos:
Ya definidos (Prelude): Int, Bool, String, Char, etc.
Buscar Prelude en www.haskell.org/hoogle
:browse en ghci
Definidos por nosotros (Proyecto 2)
Aplicaciones parciales
Se llaman tambin secciones.
Por ejemplo:
Prelude> :t (+)
(+) :: (Num a) => a -> a -> a
Prelude> :t (+4)
(+4) :: (Num a) => a -> a
Prelude> (+4) 5
9
sumar1 :: Int -> Int
sumar1 = (+1)
Map
map :: (a -> b) -> [a] -> [b]
map f [] = []
map f (x:xs) = f x : map f xs
Filter
filter :: (a -> Bool) -> [a] -> [a]
filter p [] = []
filter p (x:xs) | p x = x : filter p xs
| otherwise = filter p xs
Lecturas recomendadas
Aprende Haskell por el bien de todos!, captulos 1-6