コロン定義内でローカル変数(local)を定義できます:
: swap { a b -- b a } b a ; 1 2 swap .s 2drop
(あなたの Forth システムがこの構文をサポートしていない場合は、 最初に compat/anslocal.fs をインクルードしてください)
この例では、 { a b -- b a }
がローカル変数定義です。 スタックから 2 つのセルを取得し、 スタック頂上を
b
に入れ、 その次のスタック要素を a
に入れます(訳注: a b はスタック上から取り除かれる)。 --
は }
で終わるコメントを開始します。 ローカル変数の定義後、 ローカル変数の名前を使用すると、 その値がスタックに積まれます。
コメント部分(-- b a
)は省略できます:
: swap ( x1 x2 -- x2 x1 ) { a b } b a ;
Gforth では、 コロン定義内の任意の場所に複数のローカル変数定義を含めることができます。 対照的に、 標準Forthのプログラムでは、 コロン定義ごとにローカル変数定義を 1 つだけしか持つことができず、 そのローカル変数定義は制御構造の外側にある必要があります。
ローカル変数を使用すると、 スタックの問題に遭遇することなく、 少し長い定義を書くことができます。 ただし、重要な、ファクタリング技能を身につけるための演習として、 ローカル変数を使用せずにコロン定義を記述してみることをお勧めします。
研究課題(assignment): ここまでのあなたの定義をローカル変数を使って書き換えてみましょう。
こちらも参照下さい: Locals