如果谓词成立,则从列表中删除项目
Removing items from a list if a predicate holds
我正在尝试制作一个将谓词和列表作为输入的函数。并从谓词持有的列表中删除所有元素。到目前为止我有以下功能:
removeif :: func->[a]->[a]
removeif [] = []
removeif func (h:t)= if func then delete h (h:t) else removeif func t
我对 func->[a]->[a]
的 func
部分感到困惑,因为我不知道该如何判断它是谓词。
例如我想要的是我从终端给出这个命令
removeif threefolds [1,2,3,4,5,6,7,8,9]
threefolds
是我拥有的一个本地函数,它 returns 是一个无限列表,其中包含三的倍数,我想从输入列表中删除这些倍数。我正在考虑将 threefold
设为 bool 函数,但不确定是否有必要。
谓词应该是a -> Bool
类型的函数。所以removeif
的签名应该是
removeif :: (a -> Bool) -> [a] -> [a]
如果 threefolds
的类型为 a -> Bool
,你会没事的:-)
三倍应该 return 一个布尔值,像这样:
let threefolds x = x `mod` 3 == 0
我正在尝试制作一个将谓词和列表作为输入的函数。并从谓词持有的列表中删除所有元素。到目前为止我有以下功能:
removeif :: func->[a]->[a]
removeif [] = []
removeif func (h:t)= if func then delete h (h:t) else removeif func t
我对 func->[a]->[a]
的 func
部分感到困惑,因为我不知道该如何判断它是谓词。
例如我想要的是我从终端给出这个命令
removeif threefolds [1,2,3,4,5,6,7,8,9]
threefolds
是我拥有的一个本地函数,它 returns 是一个无限列表,其中包含三的倍数,我想从输入列表中删除这些倍数。我正在考虑将 threefold
设为 bool 函数,但不确定是否有必要。
谓词应该是a -> Bool
类型的函数。所以removeif
的签名应该是
removeif :: (a -> Bool) -> [a] -> [a]
如果 threefolds
的类型为 a -> Bool
,你会没事的:-)
三倍应该 return 一个布尔值,像这样:
let threefolds x = x `mod` 3 == 0