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.
[sourcecode] data Maybes a = Nothings | Justs a deriving Show[/sourcecode]
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.
[sourcecode] mLookUp :: [String] -> String -> Maybes IntmLookUp [] s = Nothings
mLookUp (x:xs) s = Justs (lookUp (x:xs) s)
[/sourcecode]
2. mInit: dada una lista, devuelve una copia de esta sin su último elemento o Nothing si la lista está vacía.
[sourcecode] mInit :: [Int] -> Maybes [Int] mInit[] = NothingsmInit [n] = Justs [] mInit (xs)= Justs (inits xs)
[/sourcecode]
3. mLast: dada una lista, devuelve su último elemento o Nothing si la lista está vacía.
[sourcecode] mLast :: [Int] -> Maybes IntmLast [] = Nothings
mLast (xs) = Justs (lasts xs)
[/sourcecode]
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.
[sourcecode] takeExactlyN :: [a] -> Int -> Maybes [a] takeExactlyN [] n = NothingstakeExactlyN (xs) n | ( length xs)< n = Nothings
| otherwise = Justs (takeN xs n)
[/sourcecode]
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.
[sourcecode] dropExactlyN :: [a] -> Int -> Maybes[a] dropExactlyN [] n = NothingsdropExactlyN (xs) n | length (xs)< n = Nothings
| otherwise = Justs (dropN xs n)
[/sourcecode]
6. mMaximo: dada una lista de enteros devuelve el máximo. Si la lista es vacía, devuelve Nothing.
[sourcecode] mMaximo :: [Int] -> Maybe IntmMaximo [] = Nothing
mMaximo (xs)= Just( maximum1 xs)
[/sourcecode]
Bueno gente, esos son todos los ejercicios, si tienen algún problema o creen que pueden mejorar alguno no duden en enviar un comentario.