右手边值不匹配的Erlang异常错误

Jsa*_*esu 5 erlang erl

我有这个代码,应该在列表中打印数字1到N-1,但I在这里不会附加到列表中.

enum(N,[],N) -> [];
enum(N,L,I) ->
  io:format("current number: ~w~n", [I]),
  L = L ++ I,
enum(N,[],I+1).

enumFunc(N) -> enum(N,[],1).
Run Code Online (Sandbox Code Playgroud)

当我运行sample:enumFunc(100).时,它返回 exception error: no match of right hand side value [1]

请帮我解决这个问题.谢谢.

las*_*nal 6

Erlang是一种单一的赋值语言.这意味着L如果已经为其分配了值,则无法为其分配新值L.当您尝试通过"分配"新值L = L ++ I时,实际上正在执行匹配操作.您看到no match of right hand side value [1]错误的原因是因为L不相等,L ++ I因为L已经分配了值[1]并且不匹配[1,2]

enum(N,L,N) -> L;
enum(N,L,I) ->
  io:format("current number: ~w~n", [I]),
  L0 = L ++ [I],
  enum(N,L0,I+1).

enumFunc(N) -> enum(N,[],1).
Run Code Online (Sandbox Code Playgroud)