【发布时间】:2018-08-29 08:52:33
【问题描述】:
我正在尝试通过解决一些在线问题和培训练习来学习 Haskell。
现在我正在尝试创建一个从列表中删除相邻重复项的函数。
示例输入
“acvvca”
“1456776541”
“阿巴克”
“aabaabckllm”
预期输出
""
""
"c"
"ckm"
我的第一个想法是创建一个函数,该函数只需删除相邻重复项的第一个实例并恢复列表。
module Test where
removeAdjDups :: (Eq a) => [a] -> [a]
removeAdjDups [] = []
removeAdjDups [x] = [x]
removeAdjDups (x : y : ys)
| x == y = removeAdjDups ys
| otherwise = x : removeAdjDups (y : ys)
*Test> removeAdjDups "1233213443"
"122133"
此函数适用于首次找到的对。
所以现在我需要对函数的结果应用相同的函数。
我认为 foldl 可以提供帮助,但我不知道如何实现它。
类似的东西
removeAdjDups' xs = foldl (\acc x -> removeAdjDups x acc) xs
这种方法也是实施解决方案的最佳方法,还是我应该考虑更好的方法?
【问题讨论】:
-
类似于 Unix
uniq的东西不会更常见吗?
标签: list haskell recursion fold