Erlang 为什么';没有匹配的函数子句';即使四个参数被传递给一个4的函数?
这是我的问题代码:Erlang 为什么';没有匹配的函数子句';即使四个参数被传递给一个4的函数?,erlang,Erlang,这是我的问题代码: -module(test). -export([seed_matrix2/0, take_row_and_column/4]). seed_matrix2() -> [0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0]. take_row_and_column(R, C, AnsMatrix, SideLen) -> RowVector = [ V || X <-
-module(test).
-export([seed_matrix2/0, take_row_and_column/4]).
seed_matrix2() ->
[0, 0, 1, 0,
4, 0, 0, 0,
0, 0, 0, 2,
0, 4, 0, 0].
take_row_and_column(R, C, AnsMatrix, SideLen) ->
RowVector = [ V || X <- lists:seq(0, SideLen-1), V <- lists:nth(R*SideLen+X, AnsMatrix) ],
ColVector = [ V || X <- lists:seq(0, SideLen-1), V <- lists:nth(X*SideLen+C, AnsMatrix) ],
{RowVector, ColVector}.
我通常在传递错误数量的参数或无法满足类型保护时得到此结果。我不明白为什么此代码会触发no function子句匹配
以下是erl
的版本标志:
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]
Eshell V5.10.4 (abort with ^G)
所讨论的失败函数是编译器生成的用于列表理解的函数(请注意名称中的“-lc$…”。看起来这是因为生成器V所讨论的失败函数是编译器为列表理解生成的函数(注意名称中的“-lc$…”)。看起来这是因为您的发电机V以下是修复方法:
take_row_and_column(R, C, AnsMatrix, SideLen) ->
RowVector = [ lists:nth((R-1)*SideLen+X, AnsMatrix) || X <- lists:seq(1, SideLen-1) ],
ColVector = [ lists:nth((X-1)*SideLen+C, AnsMatrix) || X <- lists:seq(1, SideLen-1) ],
{RowVector, ColVector}.
获取行和列(R、C、AnsMatrix、SideLen)->
RowVector=[列出:n((R-1)*SideLen+X,AnsMatrix)| | X以下是修复方法:
take_row_and_column(R, C, AnsMatrix, SideLen) ->
RowVector = [ lists:nth((R-1)*SideLen+X, AnsMatrix) || X <- lists:seq(1, SideLen-1) ],
ColVector = [ lists:nth((X-1)*SideLen+C, AnsMatrix) || X <- lists:seq(1, SideLen-1) ],
{RowVector, ColVector}.
获取行和列(R、C、AnsMatrix、SideLen)->
行向量=[列表:第n((R-1)*侧边+X,矩阵)| | X感谢您的回答。虽然建议的解决方案无法解决问题,但您的回答有助于我理解错误消息!感谢您的回答。虽然建议的解决方案无法解决问题,但您的回答有助于我理解错误消息!如果您的种子矩阵是更明显的代表性列表列表,则在上,代码会简单得多。如果您的种子矩阵是一个列表列表,它是更明显的表示形式,那么代码会简单得多。