我如何过滤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列表中的许多条件?的主要内容,如果未能解决你的问题,请参考以下文章

Haskell如何知道`xs`是函数定义中的列表?

如何在 R 中迭代地过滤列表中的列表或如何同时使用两个条件过滤 data.table,在运行时创建对象

如何展平haskell中的列表列表

Haskell 中的单子——洪峰老师讲创客道(三十五)

Haskell趣学指南

具有haskell中的多参数函数的延迟过滤器