我们知道变量在erlang中不可变。但考虑一下这段代码,为什么[1,2,3,4]的每个值都按顺序模式匹配到N,并且不抛出异常?
1> [2*N || N <- [1,2,3,4]].
[2,4,6,8]
答案 0 :(得分:4)
说变量不能变量并不完全正确。更多的是变量只能分配一次。所以下面的伪代码是非法的:
N = 4;
foo(N);
N = N + 1;
foo(N);
但是,以下是合法的:
fact(0) -> 1,
fact(N) -> N * fact(N-1).
当我们调用fact(4)时,对于每个不同的函数调用,N将取值4然后是3然后是2然后是1。您在上面显示的代码类似。对于列表中的每个项目,N采用不同的值。但是你从来没有多次赋予N的值。