如何判断Haskell列表所有元素均为大于10的奇数?现有代码为何不生效?
代码错误原因分析
- 第一是返回类型不匹配:你声明的函数
f的类型为[Int] -> Bool,要求最终返回布尔值,但函数体中列表推导式的输出是满足筛选条件的元素组成的[Int]类型列表,二者类型不符,代码无法通过编译。 - 第二是逻辑不符合需求:你需要判断列表所有元素都满足大于10且为奇数,现有列表推导仅能筛选出符合条件的元素,无法直接得到「是否全部符合」的布尔结论。
正确实现参考
你可以直接使用Haskell内置的all函数实现「所有元素满足指定条件」的判断逻辑,示例如下:
f :: [Int] -> Bool f xs = all (\x -> x > 10 && odd x) xs
如果希望基于列表推导的思路实现,也可以判断是否不存在不符合条件的元素:
f :: [Int] -> Bool f xs = null [x | x <- xs, x <= 10 || even x]
内容的提问来源于stack exchange,提问作者user17246028
相关产品推荐
相关产品推荐

