Mínimo y máximo de un montículo
Definir la función
1 |
minMax :: Ord a => Monticulo a -> Maybe (a,a) |
tal que (minMax m) es justamente el par formado por el menor y el mayor elemento de m, si el montículo m es no vacío. Por ejemplo,
1 2 3 |
minMax (foldr inserta vacio [4,8,2,1,5]) == Just (1,8) minMax (foldr inserta vacio [4]) == Just (4,4) minMax vacio == Nothing |
Nota: Este ejercicio debe realizarse usando únicamente las funciones de la librería de montículo (I1M.Monticulo) que se describe aquí y se encuentra aquí.
Soluciones
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import I1M.Monticulo -- http://bit.ly/1AKmUQB minMax :: Ord a => Monticulo a -> Maybe (a, a) minMax m | esVacio m = Nothing | otherwise = Just (menor m,mayor m) -- (mayor m) es el mayor elemento del montículo m. Por ejemplo, -- mayor (foldr inserta vacio [1,8,2,4,5]) == 8 mayor :: Ord a => Monticulo a -> a mayor m | esVacio r = menor m | otherwise = mayor r where r = resto m -- 2ª definición de mayor mayor2 :: Ord a => Monticulo a -> a mayor2 m = last (monticulo2Lista m) monticulo2Lista :: Ord a => Monticulo a -> [a] monticulo2Lista m | esVacio m = [] | otherwise = menor m : monticulo2Lista (resto m) |
Una versión point-free: