我知道一个人可以做到:

any (>3) [1,2,3,4,5]

但什么是优雅的实现方式:
any and[(>3),(<5)] [1,2,3,4,5]

或者
all or[(<2),(>4)] [1,2,3,4,5]

等等?

最佳答案

我相信您想检查是否有任何元素既是 (<5) 又是 (>3)

你可以这样做:

any (\x -> x > 3 && x < 5) [1..5]

你的另一个可以通过
any (\x -> x < 2 || x > 4) [1..5]

但也许定义 &&|| 来处理函数会更有趣:
infixr 3 &&&
infixr 3 |||

(&&&) :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)
(f &&& g) x = f x && g x

(|||) :: (a -> Bool) -> (a -> Bool) -> (a -> Bool)
(f ||| g) x = f x || g x

所以现在我们可以将您的示例重写为:
any ((>3) &&& (<5)) [1..5]
any ((<2) ||| (>4)) [1..5]

关于haskell - 多个元素上的 bool 运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12654042/

10-11 22:35
查看更多