Erlang异常错误,右侧值不匹配

时间:2018-09-23 16:34:55

标签: 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).

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

请帮助我解决此问题。谢谢。

1 个答案:

答案 0 :(得分:6)

Erlang是一种单一的分配语言。这意味着如果已经为L分配了值,则不能为L分配新值。当您尝试通过L = L ++ I“分配”新值时,实际上是在执行 matching 操作。您看到no match of right hand side value [1]错误的原因是因为L不等于L ++ I,因为L已经被分配了[1]的值并且与{{ 1}}

[1,2]