加法 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]]
我有一个问题 我想在 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]]