List 按筛选器列表筛选元素列表

List 按筛选器列表筛选元素列表,list,haskell,filtering,List,Haskell,Filtering,我在想,如果我有一个元素列表[1,2,…n],还有一个过滤器列表,比如[(>3)( 以及过滤器列表,如[(>3),(Bool),因此您应该使用: filters :: [a] -> [a -> Bool] -> [a] 我们可以进一步将签名推广到: filters :: Foldable f => [a] -> f (a -> Bool) -> [a] filters xs fs = filter (\x -> all ($ x) fs) xs f

我在想,如果我有一个元素列表
[1,2,…n]
,还有一个过滤器列表,比如
[(>3)(
以及过滤器列表,如
[(>3),(Bool
),因此您应该使用:

filters :: [a] -> [a -> Bool] -> [a]
我们可以进一步将签名推广到:

filters :: Foldable f => [a] -> f (a -> Bool) -> [a]
filters xs fs = filter (\x -> all ($ x) fs) xs
filters::Foldable f=>[a]->f(a->Bool)->[a]

filters xs fs=filter(\x->all($x)fs)xs
一个接一个地链接过滤器

filters :: [a] -> [a -> Bool] -> [a]
filters xs ps  =  foldr (\p r -> filter p r) xs ps
或者,更短一些

filters :: [a] -> [a -> Bool] -> [a]
filters  =  foldr filter
或者我们可以使用
foldl'(翻转过滤器)
,它将列表按从左到右的顺序推送到过滤器中。

最近的现有技术(带有指向更多现有技术的指针):
filters :: Foldable f => [a] -> f (a -> Bool) -> [a]
filters xs fs = filter (\x -> all ($ x) fs) xs
filters :: [a] -> [a -> Bool] -> [a]
filters xs ps  =  foldr (\p r -> filter p r) xs ps
filters :: [a] -> [a -> Bool] -> [a]
filters  =  foldr filter