【发布时间】:2014-12-11 03:53:13
【问题描述】:
let nums = [4,5,2,6,2,6,44,1213]
我必须使用列表推导来过滤由 nums 定义的列表,使其不包含任何偶数或任何大于 50 的数字
我不知道为什么我无法解决这个问题!
[x | x <- [nums], x == even, x <= 50]
【问题讨论】:
let nums = [4,5,2,6,2,6,44,1213]
我必须使用列表推导来过滤由 nums 定义的列表,使其不包含任何偶数或任何大于 50 的数字
我不知道为什么我无法解决这个问题!
[x | x <- [nums], x == even, x <= 50]
【问题讨论】:
试试[x | x <- nums, even x, x <= 50]。 nums 已经是一个列表,当你在它周围加上额外的方括号时,这意味着x 将遍历列表[nums] 中的元素,而不是列表nums。您也不应该将x 与even 进行比较。 even 是一个函数,而不是一个值,它的类型为even :: Int -> Bool,所以使用它作为even x。这就像说x == (<= 50),这没有多大意义。
【讨论】:
过滤不大于50的偶数:
[x | x <- nums, even x, x <= 50]
过滤不大于50的奇数:
[x | x <- nums, not $ even x, x <= 50]
【讨论】:
odd 而不是not . even?