加法 2 矩阵 Erlang

Addition 2 Matrix Erlang

我有一个问题 我想在 erlang 中逐行添加 2 个矩阵,我正在尝试应用 Haskell:

的代码
add :: Num a => [[a]] -> [[a]] -> [[a]]
add = zipWith $ zipWith (+)

我做了这样的事情:

add([[]],[[]]) -> []
add = zipWith $ zipWith (+)

但是它得到了一个错误,$,我真的很困惑。我如何在 erlang 中执行此操作?

并以这种方式工作:

  add([[ 1, 2 ],[ 3 , 4 ]] , [[ 4 , 5 ],[ 6 , 7 ]] ).

Result:

[[ 6, 8], [ 10, 12]]

这是您的 Haskell 函数到 Erlang 的方向转换:

add(Xss, Yss) ->
  lists:zipwith(fun(Xs, Ys) -> lists:zipwith(fun(X, Y) -> X + Y end, Xs, Ys) end, Xss, Yss).

(+) 变为 fun(X, Y) -> X + Y end 并且由于 Erlang 没有类似 $ 运算符或函数的自动部分应用的东西,我们需要命名所有参数并将它们显式传递给lists:zipwith.

它按预期工作:

1> a:add([[1,2],[3,4]],[[4,5],[6,7]]) == [[5, 7], [9, 11]].
true
1> shell:strings(false).            
true
2> AddRow = fun(X, Y) -> lists:zipwith(fun erlang:'+'/2, X, Y) end.
#Fun<erl_eval.12.99386804>
3> Add = fun(X, Y) -> lists:zipwith(AddRow, X, Y) end.             
#Fun<erl_eval.12.99386804>
4> Add([[1,2],[3,4]],[[4,5],[6,7]]).                               
[[5,7],[9,11]]