【发布时间】:2015-06-30 23:47:08
【问题描述】:
我是 Haskell 的新手,我正在尝试使用以下代码从列表中删除重复项。但是,它似乎不起作用。
compress [] = []
compress (x:xs) = x : (compress $ dropWhile (== x) xs)
我尝试了一些搜索,所有建议都使用 foldr/map.head。有没有基本结构的实现?
【问题讨论】:
-
提示:你的想法完全正确,除了
dropWhile是错误的函数。dropWhile删除列表中的每个元素直到它遇到== x的元素;你需要一些东西来删除这样的每个元素。 -
关于这个主题的讨论很好here。
-
请注意,有一个名为
nub的内置模块来自Data.List模块。 -
@TikhonJelvis 你确定吗? GHCi 给
dropWhile (==1) [1,1,1,2,3,1,4,5,6] ==> [2,3,1,4,5,6]。 -
哦,是的,完全搞反了,对不起!无论哪种方式,
dropWhile都不是正确的函数。
标签: haskell