Menu Close

Etiqueta: menor

Mínimo y máximo de un montículo

Definir la función

   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,

   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

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)