【发布时间】:2016-01-14 09:15:17
【问题描述】:
我正在尝试制作一个将谓词和列表作为输入的函数。并从列表中删除谓词所在的所有元素。到目前为止,我有以下功能:
removeif :: func->[a]->[a]
removeif [] = []
removeif func (h:t)= if func then delete h (h:t) else removeif func t
我对@987654323@ 的func 部分感到困惑,因为我不知道该如何判断它是谓词。
例如我想要的是我从终端给出这个命令
removeif threefolds [1,2,3,4,5,6,7,8,9]
threefolds 是我拥有的本地函数,它返回一个无限列表,其中包含三的倍数,我想从输入列表中删除这些倍数。我正在考虑将 threefold 设为 bool 函数,但不确定是否有必要。
【问题讨论】:
-
removeIf p = filter (not . p) -
我不明白这个问题。谓词是类型为
a -> Bool的函数,用于某些a。if的条件需要Bool,所以如果你想使用类似的代码,你可以做的不多。 -
@Cactus 非常感谢,这是个好主意:)
-
@Bakuriu 非常感谢,我对此感到困惑,现在我很清楚谓词以及我应该如何继续。谢谢百万!!!! :)