Forth では、 コロン定義内でのみ制御構造を使用できます。 if
構造は以下のようになります:
: abs ( n1 -- +n2 ) dup 0 < if negate endif ; 5 abs . -5 abs .
if
はスタックからフラグを取得します。 フラグがゼロ以外 (true) の場合は、 その次のコードが実行されます。 そうでない場合は、
endif
(または else
) の後から実行が続けられます。 <
は、 頂上から 2
つのスタック要素を比較し、 フラグを生成します。
1 2 < . 2 1 < . 1 1 < .
実は、 endif
の標準Forthでの名前は then
です。 このチュートリアルでは、 endif
を使用した例を示します。 なぜなら、 then
が異なる意味を持つ他のプログラミング言語に慣れている人々にとっては、
endif
を使用する方が混乱が少ないからです。 システムに endif
がない場合は、 以下のように定義します
: endif postpone then ; immediate
あなたはオプションで else
部分を使用できます:
: min ( n1 n2 -- n ) 2dup < if drop else nip endif ; 2 3 min . 3 2 min .
研究課題(assignment):
else
部分を付けずにmin
を記述してみましょう。 (ヒント:nip
の定義は何ですか?)。
こちらも参照下さい: Selection