我有这段代码应该在列表中打印数字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]
请帮助我解决此问题。谢谢。
答案 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]