我如何过滤Haskell列表中的许多条件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我如何过滤Haskell列表中的许多条件?相关的知识,希望对你有一定的参考价值。
已经给出了功能定义
filterMany :: [a -> Bool] -> [a] -> [a]
filterMany (f:fs) [] = []
filterMany (f:fs) (x)
| filter (f) x == True = x : filter (fs) x
| otherwise = filter (fs) x
输出应为:
filterMany [even, odd] [1..10] == []
filterMany [even, (\x -> x `mod` 4 /= 0)] [1..10] == [2,6,10]
filterMany [(<7), (>3), odd] [1..20] == [5]
答案
您可以在这里使用all :: (a -> Bool) -> [a] -> Bool
检查是否满足all条件。因此,我们可以通过以下方式实现此目标:
all :: (a -> Bool) -> [a] -> Bool
因此,我们在这里通过指定filterMany :: Foldable f => f (a -> Bool) -> [a] -> [a]
filterMany fs = filter (\x -> all ($ x) fs)
将所有谓词应用于参数x
。如果所有这些谓词都成立,那么我们将重新训练元素all ($ x) fs
。
例如:
x
以上是关于我如何过滤Haskell列表中的许多条件?的主要内容,如果未能解决你的问题,请参考以下文章