2014-11-03 66 views
0

我实现了一个函数,可以计算一个数字列表,并生成列表中有多少个偶数,我使用递归实现,但是我需要这次与列表理解。 我曾尝试使用列表理解,但一旦我执行该函数,它只是挂起,它没有给我任何东西。这里是我的代码:计数偶数haskell与列表理解?

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

我没有在这个网站上搜索它,我只发现与递归相同的功能,但没有与列表理解实现。 – wadbarca 2014-11-03 02:34:37

+0

''[1 ..]'包含无限数量的偶数 - 这就是为什么'countEven'挂起的原因。 – ErikR 2014-11-03 02:38:26

+0

你是对的我的坏:(我只是把它找出来我是一个新的Haskell,任何想到要放什么?我试图把[1..n],但它不起作用? – wadbarca 2014-11-03 02:40:30

回答

2

列表理解可以用来生产其他列表,但不计数。因此,你需要将列表理解与别的东西结合起来,例如

countEvens :: [Int] -> Int 
countEvens l = length [ x | x <- l, even x ] 

这里,列表理解刚刚产生的所有偶数子列表,并length地完成作业。

+0

感谢它的如此简单,但我不知道为什么我把它搞乱了大声笑 – wadbarca 2014-11-03 03:01:07