2011-10-05 88 views
3

這就是我有矩陣加法在HaskellHaskell的矩陣加/減法

 

    > add :: (Num a) => [[a]] -> [[a]] -> [[a]] 
    > add [] [] = [] 
    > add (x:xs) (y:ys) = zipWith (+) x y : add xs ys 
 

添加[[1,2],[3,4]] [[5,6],[7,8 ]]給我[6,8],[10,12]

不過,我試圖用一個行,而不是

 

    > add :: (Num a) => [[a]] -> [[a]] -> [[a]] 
    > add = map ((zipWith (+)) 
 

做怎麼會在地圖功能不起作用?

+0

請注意,您也有不平衡的括號...... – MatrixFrog

回答

7

map功能並不在這裏,因爲你遍歷列表,而不是一個工作。要並行迭代兩個列表,您可以使用zipWith,就像您已經在爲內部循環做的那樣。

Prelude> let add = zipWith (zipWith (+)) 
Prelude> add [[1, 2], [3, 4]] [[5, 6], [7, 8]] 
[[6,8],[10,12]] 
+4

事實上,這個概念適用於所有的n維列表。要添加兩個四維張量,可以說'(zipWith.zipWith.zipWith.zipWith)(+)'。 – luqui

5

map需要在一個列表中:你試圖給它兩個

嘗試類似:

add = zipWith (zipWith (+))