Blog
Ejercicios de Haskell resueltos – Parte 3

Seguimos con la tercera parte de ejercicios de Haskell resueltos sobre listas, usando el recorrido recursivo y en este caso empleando el tipo de dato Maybe.
Para resolver estos ejercicios vamos a utilizar algunas de las funciones auxiliares que vimos en los posts http://programacionextrema.com/2015/12/16/ejercicios-de-haskell-resueltos-parte-2/ y http://programacionextrema.com/2015/12/16/ejercicios-de-haskell-resueltos-parte-1/.
De la siguiente forma vamos a definir el tipo de dato Maybe para utilizar en los ejercicios.
data Maybes a = Nothings | Justs a deriving Show
1. mLookUp: dada una lista de strings y un string s devuelve la posición de la lista recibida en la que se encuentra s o Nothing si s no se encuentra en la lista.
mLookUp :: [String] -> String -> Maybes Int mLookUp [] s = Nothings mLookUp (x:xs) s = Justs (lookUp (x:xs) s)
2. mInit: dada una lista, devuelve una copia de esta sin su último elemento o Nothing si la lista está vacía.
mInit :: [Int] -> Maybes [Int] mInit[] = Nothings mInit [n] = Justs [] mInit (xs)= Justs (inits xs)
3. mLast: dada una lista, devuelve su último elemento o Nothing si la lista está vacía.
mLast :: [Int] -> Maybes Int mLast [] = Nothings mLast (xs) = Justs (lasts xs)
4. takeExactlyN: dada una lista y un número n, devuelve una lista con los primeros n elementos de lista recibida. Si la lista recibida tuviera menos de n, elementos devuelve Nothing.
takeExactlyN :: [a] -> Int -> Maybes [a] takeExactlyN [] n = Nothings takeExactlyN (xs) n | ( length xs)< n = Nothings | otherwise = Justs (takeN xs n)
5. dropExactlyN: dada una lista y un número n, devuelve una lista sin los primeros n elementos de lista recibida. Si la lista recibida tuviera menos de n elementos, devuelve Nothing.
dropExactlyN :: [a] -> Int -> Maybes[a] dropExactlyN [] n = Nothings dropExactlyN (xs) n | length (xs)< n = Nothings | otherwise = Justs (dropN xs n)
6. mMaximo: dada una lista de enteros devuelve el máximo. Si la lista es vacía, devuelve Nothing.
mMaximo :: [Int] -> Maybe Int mMaximo [] = Nothing mMaximo (xs)= Just( maximum1 xs)
Bueno gente, esos son todos los ejercicios, si tienen algún problema o creen que pueden mejorar alguno no duden en enviar un comentario.