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