假设我有序列<1,<>,2,<>>
。
我怎么能去删除空列表并得到<1,2>
?理想情况下,不使用递归或迭代。
谢谢。
PS:我用的是FP编程语言
您可能正在寻找的是filter
. 它接受一个谓词并取出不满足它的元素。
由于 FP 语言的语法很奇怪,而且我找不到任何文档,因此我无法提供filter
. 但总的来说,它可以使用fold
--insert
您提供的链接中的 s 来实现。
这就是我的意思(在 Haskell 中):
filter p list = foldr (\x xs -> if p x then x:xs else xs) [] list¹
如果你不明白,请看这里。当你写完filter
后,你可以这样称呼它
newList = filter notEmpty theList
(其中nonEmpty
是谓词或 lambda)。哦,当然这只是通过使用另一个函数来隐藏递归;在某些时候,你必须递归。
¹Haskell 中的 : 运算符是 list consing(将元素附加到头部),而不是函数应用程序。