2014-11-03 67 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