次: , 前: Setting Variables, 上: Variables


10.9 変数束縛のスコープルール

あるシンボルfooは、さまざまなローカルな変数束縛を持つことができます。 Lispプログラムの異なる場所で確立されたものや グローバル束縛です。 もっとも最近に確立した束縛が他のものに優先します。

Emacs Lispのローカル束縛は、無限のスコープ(indefinite scope)と 動的存続期間(dynamic extent)を持ちます。 スコープ(scope)とは、ソースコードのテキスト上の どこから束縛を参照できるかを表します。 無限のスコープとは、プログラムのどこからでも変数束縛を参照できることを 意味します。 存続期間(extent)とは、プログラムの実行にしたがって、 いつ束縛が存在するかを表します。 動的存続期間とは、束縛を作成した構造が有効である限り、 束縛が存続することを意味します。

動的存続期間と無限のスコープの組み合せを 動的スコープ(dynamic scoping)と呼びます。 対照的に、ほとんどのプログラム言語は、 レキシカルスコープ(lexical scoping)を用います。 つまり、ローカル変数の参照は、 その変数を束縛する関数やブロックのテキスト上で内側にある必要があります。

Common Lispに関した注意: Common Lispでは、『スペシャル』と宣言した変数は、 Emacs Lispのすべての変数と同様に、動的スコープである。