Mínimos locales
Un mínimo local de una lista es un elemento de la lista que es que su predecesor y que su sucesor en la lista. Por ejemplo, 1 es un mínimo local de [3,2,1,3,7,7,1,0,2] ya que es menor que 2 (su predecesor) y que 3 (su sucesor).
Definir la función
minimosLocales :: Ord a => [a] -> [a]
tal que (minimosLocales xs) es la lista de los mínimos locales de la lista xs. Por ejemplo,
minimosLocales [3,2,1,3,7,7,9,6,8] == [1,6] minimosLocales [1..100] == [] minimosLocales "mqexvzat" == "eva"
Soluciones
-- 1ª definición (por recursión): minimosLocales1 :: Ord a => [a] -> [a] minimosLocales1 (x:y:z:xs) | y < x && y < z = y : minimosLocales1 (z:xs) | otherwise = minimosLocales1 (y:z:xs) minimosLocales1 _ = [] -- 2ª definición (por comprensión): minimosLocales2 :: Ord a => [a] -> [a] minimosLocales2 xs = [y | (x,y,z) <- zip3 xs (tail xs) (drop 2 xs), y < x, y < z]