我是Haskell的新手,我刚遇到这个问题/错误。
我不知道发生了什么,我也不是很熟悉使用列表并将它们定义为(l:k)
...我真的不知道l和k被认为是什么......我是一个元素,k是一个列表?
无论如何,我很感激有人向我解释了这些l和k的东西,或者在使用list的函数内部(l:t:k)
,也许是一种编写这个简单删除函数的方法,假设元素在列表中,找到所需元素的第一个外观并删除它,返回新列表。
delete :: Eq b => b -> [b] -> [b]
delete r (l:k)
| inside r k = [l]:delete(r k)
| otherwise = k
答案 0 :(得分:2)
模式l:k
做了三件事:
l
绑定到列表的第一个元素k
绑定到列表的其余部分。如果您有非空列表,则需要将术语r
与l
进行比较。如果他们相等,您只需返回列表的其余部分。否则,您将l
放回到递归调用产生的列表中。
如果列表 为空,您还需要处理它,只需返回一个空列表即可。 (从r
删除[]
会产生[]
。)
delete :: Eq b => b -> [b] -> [b]
delete r (h:t) | r == h = t -- h for head, t for tail
| otherwise = h : delete r t
delete _ [] = [] -- base case