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