Haskell矩阵加法/减法

时间:2011-10-05 01:20:54

标签: haskell map

这就是我在Haskell中添加矩阵的原因


    > 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 (+))

为什么地图功能不起作用?

2 个答案:

答案 0 :(得分:8)

map函数在此处不起作用,因为您正在迭代两个列表而不是一个。要并行迭代两个列表,可以使用zipWith,就像您已经为内循环做的那样。

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

答案 1 :(得分:6)

map会收到一个列表:您正试图将其两个

尝试类似:

add = zipWith (zipWith (+))