我知道有人可以做:
any (>3) [1,2,3,4,5]
但优雅的实现方式是什么:
any and[(>3),(<5)] [1,2,3,4,5]
or
all or[(<2),(>4)] [1,2,3,4,5]
etc?
我相信您想检查是否有任何元素同时存在(<5)
and (>3)
.
你可以这样做:
any (\x -> x > 3 && x < 5) [1..5]
你的另一个可以通过
any (\x -> x < 2 || x > 4) [1..5]
但也许定义一下会更有趣&&
and ||
处理函数:
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]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)