Haskell

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.

Compartilo en
Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestEmail this to someone

AboutJosé Di Meglio

Apasionado de la tecnología y programación. Aportando información gratuita sobre el mundo de la informática.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *