我是Haskell的新手,我刚遇到这个问题/错误。
我一点都不知道发生了什么,我也不太熟悉使用列表并将它们定义为(l:k)……我真的不知道l和k被认为是什么。L是一个元素,k是一个列表?
无论如何,我希望有人向我解释这些l和k的事情,或者可能在函数中使用list,或者使用(l:t:k)来编写这个简单的删除函数,它在给定元素在list中的情况下,找到所需元素的第一个出现,并删除它,返回新的list。
delete :: Eq b => b -> [b] -> [b]
delete r (l:k)
| inside r k = [l]:delete(r k)
| otherwise = k发布于 2018-04-06 20:43:25
模式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 casehttps://stackoverflow.com/questions/49692885
复制相似问题