Matrix 加2矩阵Erlang

Matrix 加2矩阵Erlang,matrix,erlang,addition,Matrix,Erlang,Addition,我有个问题 我想在erlang中按行添加2个矩阵,我正在尝试应用Haskell的代码: add :: Num a => [[a]] -> [[a]] -> [[a]] add = zipWith $ zipWith (+) 我是这样做的: add([[]],[[]]) -> [] add = zipWith $ zipWith (+) 但这是一个错误,用美元,我真的很困惑。在erlang我怎么做 并以这种方式工作: add([[ 1, 2 ],[ 3 , 4 ]]

我有个问题 我想在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 ]] ).
结果:


这是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没有类似于
$
操作符或函数的自动部分应用程序的东西,所以我们需要命名所有参数并显式地将它们传递给
列表:zipwith

它按预期工作:

1> a:add([[1,2],[3,4]],[[4,5],[6,7]]) == [[5, 7], [9, 11]].
true

这是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没有类似于
$
操作符或函数的自动部分应用程序的东西,所以我们需要命名所有参数并显式地将它们传递给
列表:zipwith

它按预期工作:

1> a:add([[1,2],[3,4]],[[4,5],[6,7]]) == [[5, 7], [9, 11]].
true
1>shell:strings(false)。
真的
2> AddRow=fun(X,Y)->列表:zipwith(fun erlang:“+”/2,X,Y)end。
#乐趣
3> Add=fun(X,Y)->列表:zipwith(AddRow,X,Y)end。
#乐趣
4> 添加([[1,2],[3,4],[4,5],[6,7]])。
[[5,7],[9,11]]
1>shell:strings(false)。
真的
2> AddRow=fun(X,Y)->列表:zipwith(fun erlang:“+”/2,X,Y)end。
#乐趣
3> Add=fun(X,Y)->列表:zipwith(AddRow,X,Y)end。
#乐趣
4> 添加([[1,2],[3,4],[4,5],[6,7]])。
[[5,7],[9,11]]

如何定义矩阵?这甚至不是含糊不清的Erlang语法。你能详细介绍一下你想做什么吗?矩阵是按行排列的,是控制台的输入,类似这样:add([[1,2],[3,4],[[4,5],[6,7]])。这是矩阵A(12)(34)矩阵B(34)(45)那么,你的Q分成两部分-从矩阵(列表)中提取行,然后将元素求和写入新的行,对吗?是的,是的,我计划将第一个列表与第二个列表相加,使用类似map的东西,但我不知道如何实现它。如何定义矩阵?这甚至不是模糊的Erlang语法。你能详细介绍一下你想做什么吗?矩阵是按行排列的,是控制台的输入,类似这样:add([[1,2],[3,4],[[4,5],[6,7]])。这是矩阵A(12)(34)矩阵B(34)(45)那么,你的Q分成两部分-从矩阵(列表)中提取行,然后将元素求和写入新的行,对吗?是的,是的,我计划将第一个列表与第二个列表相加,使用类似map的东西,但我不知道如何实现。谢谢,但我如何检索结果:add([[1,2],[3,4],[[4,5],[6,7]])。结果[[6,8],[10,12]]您的Haskell代码返回的值与我的答案相同。为什么它应该返回
[[6,8],[10,12]
?它有一个错误,我测试了它,但我不知道它为什么不打印第二部分。a:add([[1,2],[3,4,5],[6,7]])。结果:[[5,7],“\t\v]”在。有关更多信息,请参阅。谢谢,但我如何检索结果:添加([[1,2],[3,4],[[4,5],[6,7])。结果[[6,8],[10,12]]您的Haskell代码返回的值与我的答案相同。为什么它要返回
[[6,8],[10,12]]
?它有一个错误,我测试了它,但我不知道它为什么不打印第二部分。a:添加([[1,2],[3,4],[[4,5],[6,7])。结果:[[5,7],“\t\v”]在Erlang中,
“\t\v”=[6,7]
。有关更多信息,请参阅。