2012-12-06 74 views

回答

2

嘗試:

sumIn :: Num a => [[a]] -> [a] 
sumIn = foldl (zipWith (+)) (repeat 0) 

注意,如果該參數是一個空表,結果是零的無限名單。所以,你可能要分別對待這種情況下,例如

sumIn :: Num a => [[a]] -> [a] 
sumIn [] = [] 
sumIn xs = foldl (zipWith (+)) (repeat 0) xs 
2

你可以調換名單,並在結果總結每個列表:

ghci> import Data.List (transpose) 
ghci> map sum $ transpose [[2,3,4],[5,6,7],[8,9,10]] 
[15,18,21] 

不像其他的解決方案,該工程的名單長度不均勻。

2

下面是一個例子GHCI:

λ> let xs = [[2,3,4],[5,6,7],[8,9,10]] 
λ> foldr1 (zipWith (+)) xs 
[15,18,21] 
+0

如果我想要添加到其他列表中的0,如果它甚至和一個1,否則?謝謝 – user1876106

+0

你可以定義'f x = if even x then 0 else 1',然後'map f'到上面的結果上。所以'map f [15,18,21]'會給你'[1,0,1]'。那是你要的嗎? – mhwombat

+0

或'map(\'rem \'2)' – epsilonhalbe

相關問題