Haskell矩阵加法/减法

nob*_*ody 4 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 (+))

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

ham*_*mar 8

这个map函数在这里不起作用,因为你在两个列表而不是一个列表上进行迭代.要并行迭代两个列表zipWith,就像使用内循环一样.

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

  • 实际上,这推广到所有n维列表.要添加两个4维张量,可以说`(zipWith.zipWith.zipWith.zipWith)(+)`. (4认同)

iva*_*anm 6

map收集一个列表:你试图给它两个.

尝试类似的东西:

add = zipWith (zipWith (+))
Run Code Online (Sandbox Code Playgroud)