我想要一个检查列表是否只包含偶数的函数;如果是,则应返回True
,否则返回False
。
我想使用的功能是map
/ filter
/ foldr
,可能没有length
。
这是我的尝试:
ListOfeven :: [Integral] -> Bool
ListOfeven xs =
| foldr (+) True filter odd xs < 0 = True
| otherwise = False
我很确定有一种更清洁的方式..不存在吗? :)
答案 0 :(得分:7)
答案 1 :(得分:5)
myfunc = foldr (\a b -> even a && b) True
答案 2 :(得分:1)
Frerich的解决方案效果很好,但只需触摸即可优化:
evenList :: [Integer] -> Bool
evenList = foldr ((&&) . even) True
这只会在列表中运行一次。这里的函数组合有点奇怪,但在检查其类型时变得更加清晰:
(&&) . even :: Integral a => a -> Bool -> Bool
even
的结果,它接受一个参数,然后绑定到&&
运算符的第一个参数,此处以前缀表示法使用。