Ir al contenido principal

Sin consecutivos repetidos

Definir la función

sinConsecutivosRepetidos :: Eq a => [a] -> [a]

tal que (sinConsecutivosRepetidos xs) es la lista obtenida a partir de xs de forma que si hay dos o más elementos idénticos consecutivos, borra las repeticiones y deja sólo el primer elemento. Por ejemplo,

λ> sinConsecutivosRepetidos "eesssooo essss   toodddooo"
"eso es todo"

Soluciones

import Data.List (group)

-- 1ª solución (por comprensión):
sinConsecutivosRepetidos :: Eq a => [a] -> [a]
sinConsecutivosRepetidos xs = [x | (x:_) <- group xs]

-- 2ª solución (por recursión):
sinConsecutivosRepetidos2 :: Eq a => [a] -> [a]
sinConsecutivosRepetidos2 [] = []
sinConsecutivosRepetidos2 (x:xs) =
    x : sinConsecutivosRepetidos2 (dropWhile (==x) xs)