我实现了一个可以计算数字列表的函数,并生成列表中有多少偶数,我使用递归实现,但我需要这次使用列表理解。 我确实尝试使用列表理解,但是一旦我执行了该函数,它就会挂起,它什么也没给我。这是我的代码:
countEven :: (Integral t, Num a) => [t] -> a
countEven [] = 0
countEven (x:xs)
| ev == True = 1 + (countEven xs )
| otherwise = countEven xs
where ev = even x
这是我尝试使用列表理解:
evenList :: (Integral t, Num a) => [t] -> a
evenList xs = countEven [x | x <- [1..]]
答案 0 :(得分:3)
列表推导可用于生成其他列表,但不能用于计数。因此,您需要将列表理解与其他内容相结合,例如
countEvens :: [Int] -> Int
countEvens l = length [ x | x <- l, even x ]
这里,列表理解只生成一个包含所有偶数的子列表,length
完成了这项工作。