como puedo eliminar elementos repetidos de una lista?

publicado por: Anonymous

Si tengo esta lista

[a,b,c,d] y esta otra [a,b,c,a,c,b,d,a,d,c]

como puedo eliminar los elementos repetidos de esta lista [a,b,c,a,c,b,d,a,d,c] para que me quede asi [a,b,c,d]

solución

deleteN :: Int -> [a] -> [a]
deleteN _ []     = []
deleteN n (h:t)
  | n == 0    = t
  | otherwise = h : deleteN (n-1) t

Esta solución está bastante optimizada, es recursiva terminal y tan sólo recorre la lista una vez.

Para eliminar los elementos duplicados(Según la edición de la pregunta) puedes usar la función nub,del módulo Data.List, de esta manera nub lista.
Para no usar librerías(Indicado en comentario), se puede consultar el source:

nub                     :: (Eq a) => [a] -> [a]
nub l                   = nub' l []
  where
    nub' [] _           = []
    nub' (x:xs) ls
        | x `elem` ls   = nub' xs ls
        | otherwise     = x : nub' xs (x:ls)
Respondido por: Anonymous

Leave a Reply

Your email address will not be published.