ace*_*emi 0 haskell list duplicates
我正在尝试删除列表中的连续重复项;例如,给定列表[1,2,2,3,4],我需要的函数必须返回[1,3,4]。
但是,如果尾随重复项在列表中,例如在[1,2,3,4,4].
我也想用尽可能简单的术语来做,我该怎么做?
myCom :: Eq a => [a] -> [a]
myCom (x:y:ys@(z:_))
| x == y = myCom ys
| otherwise = x : myCom (y:ys)
myCom ys = ys
Run Code Online (Sandbox Code Playgroud)
您拥有的第一个模式匹配只捕获包含至少 3 个元素的列表。这就是为什么当重复项位于列表末尾时
myCom [4,4]
Run Code Online (Sandbox Code Playgroud)
被称为它只是使用
myCom ys = ys
Run Code Online (Sandbox Code Playgroud)
并返回自身。您可以通过为至少包含以下 2 个元素的列表定义 myCom 来捕捉这一点(无论如何您都没有使用 z ):
myCom (x:y:ys)
| x == y = myCom ys
| otherwise = x : myCom (y:ys)
myCom ys = ys
Run Code Online (Sandbox Code Playgroud)
这给
myCom [1,2,2,3,4,4] = [1,3]
3 个(奇数)连续数字仍然存在问题。例如我们得到:
myCom [1,2,2,2] = [1,2]
Run Code Online (Sandbox Code Playgroud)
但我明白这是理想的行为。
| 归档时间: |
|
| 查看次数: |
327 次 |
| 最近记录: |