我是Haskell的新手,并且一直在尝试基础知识。
假设我有以下列表y:3:3:2:1:9:7:3:[]
我试图找到一种删除列表y中第一个3的方法。使用简单的列表理解是否有可能?
我尝试了什么(此方法从列表中删除所有实例):
deleteFirst _ [] = []
deleteFirst a (b:bc) | a == b = deleteFirst a bc
| otherwise = b : deleteFirst a bc
最佳答案
因为其他已经提到的列表理解不是此任务的合适解决方案(难以一步一步终止执行)。
您几乎已经编写了正确的解决方案,只是在与匹配值相等的情况下,您必须通过返回列表中没有匹配元素的其余部分来终止计算:
deleteFirst _ [] = []
deleteFirst a (b:bc) | a == b = bc
| otherwise = b : deleteFirst a bc
> print $ deleteFirst 3 (3:3:2:1:9:7:3:[])
> [3,2,1,9,7,3]