Haskell Hero
Haskell Hero es un manual interactivo del lenguaje Haskell para principiantes.
|
Funciones aplicadas a listas IheadLa función unaria que devuelve el primer elemento de la lista. Definiciónhead :: [a] -> a head (x:_) = x Ejemplo de usohead [1,2,3] ~> 1 head "ABC" ~> 'A' head [[2.5, 3.0], [4.8, 10.69, 9.12], []] ~> [2.5, 3.0] tailLa función unaria que devuelve la lista sin su primer elemento. Definicióntail :: [a] -> [a] tail (_:s) = s Ejemplo de usotail [1,2,3] ~> [2,3] tail "ABC" ~> "BC" tail [[2.5, 3.0], [4.8, 10.69, 9.12], []] ~> [[4.8, 10.69, 9.12], []] null
La función unaria Definiciónnull :: [a] -> Bool null [] = True null (_:_) = False Ejemplo de usonull [] ~> True null "" ~> True null [2,3] ~> False null "KK" ~> False lengthLa función unaria que devuelve el número de elementos de la lista. Definiciónlength :: [a] -> Int length [] = 0 length (x:s) = 1 + length s Ejemplo de usolength [] ~>* 0 length [1,2,3,4] ~>* 4 length "ABCDE" ~>* 5 length ["A", "AB", "&+#!$"] ~>* 3 La evaluación modelolength [1,2,3] o length 1:[2,3] x se sustituye por 1, s se sustituye por [2,3] ~> 1 + length [2,3] x se sustituye por 2, s se sustituye por [3] ~> 1 + 1 + length [3] x se sustituye por 3, s se sustituye por [] ~> 1 + 1 + 1 + length [] length [] se evalua según la primera ecuación ~> 1 + 1 + 1 + 0 ~>* 3 Nota
Nota: Ya que la variable length (_:s) = 1 + length s Concatenación de listas
La concatenación de dos listas se hace utilizando el operador binario Definición(++) :: [a] -> [a] -> [a] [] ++ t = t (x:s) ++ t = x : (s ++ t) Ejemplo de uso[1,2] ++ [3,4,5] ~>* [1,2,3,4,5] "ABC" ++ "DE" ~>* "ABCDE" [] ++ [True, False] ~> [True, False] La evaluación modelo[1,2,3] ++ [4] lo que es sustituible por 1:[2,3] ++ [4] Según la segunda ecuación x = 1, s = [2,3], t = [4] ~> 1 : ([2,3] ++ [4]) x = 2, s = [3], t = [4] ~> 1 : (2 : ([3] ++ [4])) x = 3, s = [], t = [4] ~> 1 : (2 : (3 : ([] ++ [4]))) Según la primera ecuación ~> 1 : (2 : (3 : [4])) ≡ [1,2,3,4] Nota
Durante la concatenación de listas los elementos de la primera lista tienen que moverse a la otra lista. Esto significa que la evaluación de la expresión Selección de un elemento
Un elemento se selecciona de una lista con el operador binario
Definición(!!) :: [a] –> Int –> a (x:_) !! 0 = x (_:s) !! k = s !! (k-1) Ejemplo de uso[1,2,3] !! 0 ~>* 1 "ABCDE" !! 4 ~>* 'E' [[1,2], [3], [], [4,5]] !! 3 ~>* [4,5] take
La función binaria en que la expresión Definicióntake :: Int –> [a] –> [a] take 0 _ = [] take _ [] = [] take n (x:s) = x : take (n-1) s Ejemplo de usotake 2 [1,2,3,4] ~>* [1,2] take 3 [2] ~>* [2] take 1 "ABCD" ~>* "A" drop
La función binaria en la que la expresión Definicióndrop :: Int –> [a] –> [a] drop 0 s = s drop _ [] = [] drop n (_:s) = drop (n-1) s Ejemplo de usodrop 2 [1,2,3,4,5] ~>* [3,4,5] drop 0 [1,2,3] ~>* [1,2,3] drop 8 [1,2,3] ~>* [] concatLa función unaria que concatena listas en una lista de listas en una lista. Definiciónconcat :: [[a]] –> [a] concat [] = [] concat (s:t) = s ++ concat t Ejemplo de usoconcat [[1,2], [3,4,5], [], [6,7]] ~>* [1,2,3,4,5,6,7] concat ["ABC", "", "DEF"] ~>* "ABCDEF" |