Download - Haskell, GHCI, Secciones, Map, Filter
-
Algoritmos y Estructuras de Datos I
Martn Domnguez,Guillaume Hoffmann, Walter Alini, Pedro Snchez Terraf
DefinicionesCompilador : 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 unnuevo 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-interpretacinCon 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 HaskellFormalismo bsico:
sumList: [ Num] Num sumList. [ ] = 0 sumList.xxs = x + sumList.xsHaskell:sumList :: [Int] -> IntsumList [] = 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 HaskellFormalismo bsico:
fst: ( A,B) Afst. ( x,y) = xfst :: (a,b) -> afst (x,y) = x
Las variables de tipos empiezan con mayscula en el formalismo bsico,\ y con minsculas en Haskell.
Repaso HaskellPartes de la definicin de una funcin:func :: (Eq a, Ord a) => [a] -> [b] -- signaturafunc xs = ... -- definicin
Ms detallado:func :: (Eq a, Ord a) -- contexto (clases de tipos) => [a] -> [b] -- tipofunc 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 parcialesSe llaman tambin secciones.
Por ejemplo:
http://www.haskell.org/hoogle/?hoogle=Prelude
-
Prelude> :t (+)(+) :: (Num a) => a -> a -> a
Prelude> :t (+4)(+4) :: (Num a) => a -> a
Prelude> (+4) 59
sumar1 :: Int -> Intsumar1 = (+1)
Mapmap :: (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]
Filterfilter :: (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 ( filter even [8,2,3,6,11][8,2,6]
Lecturas recomendadas Aprende Haskell por el bien de todos!, captulos 1-6
http://www.cs.famaf.unc.edu.ar/~hoffmann/aprendehaskell/main.html
Algoritmos y Estructuras de Datos IMartn Domnguez,Guillaume Hoffmann, Walter Alini, Pedro Snchez Terraf
DefinicionesCiclo edicin-interpretacinRepaso HaskellTraduccion formalismo bsico a HaskellTraduccion formalismo bsico a HaskellRepaso HaskellTiposAplicaciones parcialesMapFilterLecturas recomendadas