0

正如我们所知,变量在 erlang 中不能是变量。但是考虑这段代码,为什么 [1,2,3,4] 的每个值都按顺序与 N 模式匹配,并且不抛出异常?

1> [2*N || N <- [1,2,3,4]].
[2,4,6,8]
4

1 回答 1

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 具有不同的值。但是您从未多次分配 N 的值。

于 2012-08-15T06:55:22.330 回答