haskell, ghci, secciones, map, filter

3
Algoritmos y Estructuras de Datos I Martín Domínguez,Guillaume Hoffmann, Walter Alini, Pedro Sánchez Terraf Definiciones Compilador : es un programa que traduce el código fuente escrito en un cierto lenguaje de programación a código de maquina para alguna arquitectura particular (ejecutable). El código generado por un compilador puede ejecutarse repetidas veces sin necesidad de volver a compilase; si es necesario hacer algún cambio en el código fuente, el programa debe recompilarse para crear un nuevo ejecutable que incluya los cambios. Intérprete: es un programa que "lee" el código fuente y lo ejecuta pero a diferencia de un compiador, el intérprete no genera ningún código ejecutable. En el caso particular de Haskell existe tanto un compilador com un intérprete de Haskell. Ciclo edición-interpretación Con el interpretador Haskell, usamos el ciclo siguiente: 1. editar código (: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 expresión, que se ejecuta mediante su evaluación Importa más el qué que el cómo Pequeña maquinita de evaluar expresiones Puede ser interpretado (ghci) y compilado (ghc) Traduccion formalismo básico a Haskell Formalismo básico: sumList:[Num]→ Num sumList.[] =0 sumList. x xs = x + sumList. xs Haskell: sumList :: [Int] -> Int sumList [] = 0

Upload: francisco

Post on 18-Nov-2015

8 views

Category:

Documents


2 download

DESCRIPTION

Breve resumen sobre las funciones mas basicas del lenguaje haskell, la funcion map y filter.

TRANSCRIPT

  • 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