如何在 haskell 中过滤掉?

How can I filter out in haskell?

我知道 filter 函数,但我想知道如何过滤掉。例如:filter odd [1,2,3] = [1,3],但我想要 filter (not(odd)) [1,2,3] = [2](是的,我知道有一个偶函数,但这只是一个例子)。我不知道是否有一个我不知道的单独函数,或者是否只有一些我可以添加到参数中的东西。谢谢。注意:我无法使用 GHC.Utils.Misc filterOut。

你很接近,你可以使用:

filter (<strong>not .</strong> odd) [1, 2, 3]

这里我们构造了一个函数\x -> not (odd x),它将因此保留所有不是奇数,因此是偶数的元素。

也可以使用 Data.List 中的 partition 函数。

Prelude> import Data.List
Prelude Data.List> lst = [1,2,3,4,5,6,7,8]
Prelude Data.List> (odds, evens) = partition odd lst
Prelude Data.List> odds
[1,3,5,7]
Prelude Data.List> evens
[2,4,6,8]

另一种选择是使用列表理解代替 filter

Prelude Data.List> [x | x <- lst, not $ odd x]
[2,4,6,8]