変数は erlang では変数にできないことがわかっているためです。しかし、このコードを考えてみましょう。[1,2,3,4] の各値が N に順次パターン マッチングされ、例外がスローされないのはなぜですか??
1> [2*N || N <- [1,2,3,4]].
[2,4,6,8]
変数は erlang では変数にできないことがわかっているためです。しかし、このコードを考えてみましょう。[1,2,3,4] の各値が N に順次パターン マッチングされ、例外がスローされないのはなぜですか??
1> [2*N || N <- [1,2,3,4]].
[2,4,6,8]
変数を変数にすることはできないと言うのは、まったく真実ではありません。さらに、変数を割り当てることができるのは1回だけです。したがって、次の疑似コードは違法です。
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の値を2回以上割り当てたことはありません。