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

Erlang exception error for no match of right hand side value

我有这段代码应该在列表中打印数字 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).,它returnsexception error: no match of right hand side value [1]

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

Erlang 是一种单一赋值语言。这意味着如果一个值已经分配给 L,则不能将新值分配给 L。当您尝试通过 L = L ++ I 'assign' 一个新值时,您实际上是在执行 匹配 操作。您看到 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).