Ir al contenido principal

Agrupación por orden de aparición

Definir la función

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

tal que (agrupacion xs) es la lista obtenida agrupando los elementos de xs según su primera aparición. Por ejemplo,

agrupacion [3,1,5,1,7,1,5,3]  ==  [3,3,1,1,1,5,5,7]
agrupacion "babcacb"          ==  "bbbaacc"

Soluciones

agrupacion :: Eq a => [a] -> [a]
agrupacion [] = []
agrupacion (x:xs) =
  x : filter (==x) xs ++ agrupacion (filter (/=x) xs)