0

假设我有序列<1,<>,2,<>>

我怎么能去删除空列表并得到<1,2>?理想情况下,不使用递归或迭代。

谢谢。

PS:我用的是FP编程语言

4

1 回答 1

0

您可能正在寻找的是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(将元素附加到头部),而不是函数应用程序。

于 2013-03-21T15:54:39.773 回答