Sei sulla pagina 1di 3

Algoritmos y Estructuras de Datos I

Martn Domnguez,Guillaume Hoffmann, Walter Alini, Pedro


Snchez Terraf

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)

Traduccion formalismo bsico a Haskell


Formalismo bsico:
sumList:[Num]Num
sumList.[]=0
sumList.xxs=x+sumList.xs
Haskell:
sumList :: [Int] -> Int
sumList []
= 0

sumList (x:xs) = x + sumList xs

Diferencias:

aplicacin de funcin
tipos
constructor de lista
signatura / prototipo de una funcin
a Num corresponden varios tipos posibles en Haskell (Int, Integer, Float...)

Traduccion formalismo bsico a Haskell


Formalismo bsico:
fst:(A,B)A
fst.(x,y)=x
fst :: (a,b) -> a
fst (x,y) = x

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

Toma 2 argumentos, uno de los cuales es una funcin


Aplica f a cada elemento de xs
El resultado es una lista con la aplicacin en el mismo orden
Ejemplo:
Prelude> map succ [1,2,3,4]
[2,3,4,5]
Prelude> map not [False, False, True]
[True,True,False]

Filter
filter :: (a -> Bool) -> [a] -> [a]
filter p [] = []
filter p (x:xs) | p x = x : filter p xs
| otherwise = filter p xs

Toma 2 argumentos, uno de los cuales es un predicado


El resultado es una lista con los elementos que cumplen el predicado
Ejemplo:
Prelude> filter (<2) [3,1,0,6,9]
[1,0]
Prelude> filter even [8,2,3,6,11]
[8,2,6]

Lecturas recomendadas
Aprende Haskell por el bien de todos!, captulos 1-6

Potrebbero piacerti anche