Next: , Previous: , Up: Forth Tutorial   [Contents][Index]


3.16 Conditional execution

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