LOCALS(局所変数1)

局所変数とは、一つのワードの実行中のみ有効で、一度そのワードを抜けるとその時点で廃棄されてしまう変数のことです。Mopsには二種類の局所変数が実装されていますが、ここでは、明示的に値を割り当ててから使う局所変数について述べます。

データスタックを擁するForth系開発環境では、一般には、局所変数に対する態度は冷淡です。本来、スタックを使うべきだからです。これに対して、Mopsでは局所変数に対しても十分な最適化が施され、場合によってはスタックのみに頼るよりも、局所変数も組み合わせて使う方が、実行速度が上がる場合があります。

局所変数は、次のような構文で宣言します。:
:  MyWord  { \ local1 local2 -- }
 .....

つまり、その局所変数の有効範囲となるワードの定義の中、ワード名の後、実際のコードが始まる前に、中括弧(curly bracket)を用いてスタック効果コメント類似の宣言を書きます。その中の、破線(二つの連続したマイナス記号)の左側にバックスラッシュ(ブラウザによってはyenマークで表示されているかもしれません)を置き、これらの間に局所変数を宣言するのです。

これらの局所変数local1およびlocal2は通常0で初期化されています。値の操作の構文は、増減も含めてValue変数と同様です。:
63  ->  local1	 \ 値63(=その時点でのトップスタック値)を格納
local1	 \ 格納された値をトップスタックに返す
1  ++>  param2	 \ param2の格納値を1(=その時点でのトップスタック値)増やす(足し算する)
2  -->  param2	 \ param2の格納値を2(=その時点でのトップスタック値)減らす(引き算する)

局所変数は原則としてレジスタ変数として実装されているため、格納場所のメモリアドレスは存在しません。

局所変数は、それが宣言されているワードの一回の実行中は有効で、値も維持されます。いったんそのワードの実行を抜けてしまった後は、再び呼びされても、以前呼び出し時の値は保持されていません。

浮動小数点数のlocal (flocalsなどともいう)が必要な場合には、名前を%で始めます。
:  MyWord2  { \ loc1 loc2 %floc1 %floc2 -- }
 .....  -> %floc1 .... 1.0 ++> %floc2 ...
使い方は整数の場合と同じですが、値は小数スタックを経由して処理されます。

効率性への配慮については、名前付き引数のページを参照してください。


関連項目:






最終更新:2019年06月01日 09:54