2011-10-05 87 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 (+))