Erlangの変数スコープについて

はじめに

Erlangの変数のスコープについて、erlang.orgの和訳をする。
元は、http://www.erlang.org/course/advanced.html

変数のスコープ

Erlangの変数XやYは、始めに束縛される場所から、最後に参照されている場所までである。
以下、ErlangのHPの例から説明する。

f( X ) ->               --- 1	変数Xは【束縛】される(★スコープ内★)
	Y = g( X ),     --- 2	変数Xは【参照】される(★スコープ内★)
	h( Y, X ),      --- 3	変数Xは【参照】される(★スコープ内★)
	p( Y ),         --- 4	以下、変数Xは利用されない(スコープ外)
	f( 12 ).        --- 5	(スコープ外)

ポイントは、束縛後、メソッド内終わりまでスコープ内とならないところ。
4行目では、もう参照することができないのである。
ここでは、変数Xに使用されている領域(メモリ)は、再利用のための領域となる。
それは、以下の原文から読み取れる。

line 1 - the variable X is defined (i.e. it becomes bound when the function is entered).
line 2 - X is used, Y is defined (first occurrence).
line 3 - X and Y are used.
line 4 - Y is used. The space used by the system for storing X can be reclaimed.
line 5 - the space used for Y can be reclaimed.

if/case/receive の変数のスコープ

条件分岐での変数スコープについて、説明する。
以下のメソッドで説明する。

f( X ) ->
    case g( X ) of
        true -> A = h( X ), B = 7;    --- 1
	false -> B = 6                --- 2
    end,
    ...,
    h( A ),                           --- 3
    ...

1の分岐が処理された場合、変数A、Bが束縛される。
2の分岐が処理された場合、変数Bが束縛される。

2の分岐が処理された場合、変数Aは束縛(定義)されていないので、
3は呼び出し失敗する。

ポイントは、分岐毎に束縛される変数が異なること。

まとめ

1.スコープは、束縛 〜 最後の参照 まで
2.分岐では、処理された分岐によって、束縛される変数が異なる。

Erlangは、難しい。。。