目次
前
次
条件分岐処理
構造化プログラムを実現するには、次の3構造が備わって
いることが、必要です。
順次処理は、実行すべき内容を並べていけばよいので
ワードを上から下に並べるだけ。
選択は、条件判定と分岐処理の組合せで実現できます。
Forthインタプリタの場合、条件分岐処理で使うワードは以下。
flag if ... then
flag if ... else ... then
条件判定でフラグをスタックに入れて、フラグで真、偽を指定。
真の場合、ifとthenに挟んだワードを実行。
偽の場合、elseとthenに挟んだワードを実行。
真、偽の値は、各々−1と0にされています。
フラグの判断は、以下で確認できました。
条件分岐処理は、ワードの中に入れて使います。
比較に利用するワードをリストしてみます。
単精度の比較は、以下。
- u<= ( u1 u2 -- flag ) Unsigned less than or equal ?
- u>= ( u1 u2 -- flag ) Unsigned greater than or equal ?
- u> ( u1 u2 -- flag ) Unsigned greater than ?
- u< ( u1 u2 -- flag ) Unsigned less than ?
- <= ( n1 n2 -- flag ) Signed less than or equal ?
- >= ( n1 n2 -- flag ) Signed greater than or equal ?
- > ( n1 n2 -- flag ) Signed greater than ?
- < ( n1 n2 -- flag ) Signed less than ?
- 0< ( n - flag ) Negative ?
- 0<> ( x -- flag ) Not zero ?
- 0= ( x -- flag ) zero ?
- <> ( x1 x2 -- flag ) Not equal ?
- = ( x1 x2 -- flag ) equal ?
倍精度の比較は、以下。
- du> ( ud1 ud2 -- flag ) Unsigned less than ?
- du< ( ud1 ud2 -- flag ) Unsigned less than ?
- d> ( d1 d2 -- flag ) Signed greater than ?
- d< ( d1 d2 -- flag ) Signed less than ?
- d0< ( d -- flag ) Negative ?
- d0= ( d -- flag ) zero ?
- d<> ( d1 d2 -- flag ) Not equal ?
- d= ( d1 d2 -- flag ) equal ?
比較によるフラグを使う他に、多方向分岐にワード case を
使うこともできます。
caseの説明は、以下。
n case
m1 of ... endof
m2 .. ... .....
flag ?of ... endof
all others
endcase
case ( n -- n ) Begins case structure
of ( m -- ) Compares m with n, choose this if n=m
?of ( flag -- ) Flag-of, for custom comparisions
endof ( -- ) End of one possibility
endcase ( n -- ) Ends case structure, discards n
一見しただけでは、意味がわからなかったなら
実際にワードを定義して使ってみるのがよいと
思います。
スタックにある値と一致したときに、of ... endofで挟んだ
ワードを実行すると、理解できます。
構造化プログラムを実現するのは、if ... thenの単独には
ならないので、後で説明します。
目次
前
次