我知道一个人可以做到:
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/