例外 1: 繰り返し指定の中で使用される変数の有効範囲 (スコープ) は、その 繰り返しの中だけです。繰り返し変数の値を、その実行ブロック内で永続的に 変更することはできません。繰り返し変数が繰り返しの前に値を持っていたと したら、その値は繰り返しの終了時に保持、または復帰されます。 例えば、以下のコマンドは、1 2 3 4 5 6 7 8 9 10 A を出力します。
i = "A" do for [i=1:10] { print i; i=10; } print i
例外 2: 関数定義で使用されるパラメータの名前は、その関数を呼び出すとき に与える実際の値の置き場所に過ぎません。例えば、以下の例では、x と y の現在、あるいは未来の値はここで示される定義には関係しないが、A はこの 関数が後で評価されるときには大域変数として存在しなければいけません:
func(x,y) = A + (x+y)/2.
例外 3: コマンド local で宣言された変数。
local 指定 (バージョン 6 での新機能) は、変数、または配列のオプショ
ン的な宣言を可能にし、それによりそれが見つかるコードブロック内部にその
有効範囲を制限するものです。このコードブロックとは、load や call
の対象、関数ブロックの評価、そして条件 if, else, do for, while
の後に続く中括弧内のコードです。
局所 (local) 変数の名前が大域 (global) 変数と重なった場合、その局所変
数の有効範囲から抜けるまでは、大域変数は隠されます。
試験段階: 現在実装されている局所変数の有効範囲は、それが宣言されたコー
ドブロックから呼び出される関数内にも延長されます。これは、call,
load, 関数ブロック呼び出しでも同じです。
これは、将来は変更され、その有効範囲はそれを宣言しているコードブロック
に厳密に制限されるようになるでしょう。
竹野茂治@新潟工科大学