Haskell 从列表中删除重复项

Gaa*_*ara 2 haskell

我是 Haskell 的新手,我正在尝试使用以下代码从列表中删除重复项。但是,它似乎不起作用。

compress []     = []
compress (x:xs) = x : (compress $ dropWhile (== x) xs)
Run Code Online (Sandbox Code Playgroud)

我尝试了一些搜索,所有建议都使用 foldr/map.head。有没有基本结构的实现?

fgv*_*fgv 5

我认为您在代码中提到的问题是您当前的实现只会摆脱相邻的重复项。正如在评论中发布的那样,内置函数nub将消除所有重复项,即使它们不相邻,并且仅保留任何元素的第一次出现。但是既然你问如何用基本的结构来实现这样的功能,那么这个怎么样?

myNub :: (Eq a) => [a] -> [a]
myNub (x:xs) = x : myNub (filter (/= x) xs)
myNub [] = []
Run Code Online (Sandbox Code Playgroud)

我向您介绍的唯一新函数是filter,它根据谓词过滤列表(在这种情况下,删除与当前元素匹配的列表其余部分中存在的每个元素)。

我希望这有帮助。