真偽の条件に応じて実行の流れを制御するのはIF文です。ところが、Mops/Forthでは、一般的なプログラミング言語にあるものと、少し書き順が違います。
条件判定に依存する実行コードは、IFとTHENで囲みます。他の言語でありがちなように、条件が真のときにTHEN以降のコードを実行するのではありません。THENはIF-THEN構造の"閉じ括弧"の役割を果たします。また、判断のために使われる真理値は、IFの前にトップスタックにおかれていなければなりません。そのようなわけで、
条件値 IF コード THEN
という順になります。条件値が真のときだけ、"コード"が実行され、THENの後へと続きます。条件値が偽なら、"コード"は実行されず、実行はTHENの直後まで飛びます。IFはトップスタックの値を費消します。
真理値判定に関して、0以外の値は全て真として扱われます。裏から言えば、0だけが偽として扱われます。
なお、ここで扱うIF-THEN構造には、ちょっとした制限があります。これらの構造はワード(またはメソッド)の定義の中でしか利用できないことです。つまり、Mopsウィンドウ上で直ちに解釈・実行することはできません。これは、Mops/ForthのIF-THENが"条件に応じて分岐する
コードをコンパイルする"という働きをするワードだからです。
IF-ELSE-THEN構文も可能です。
条件値 IF コード1 ELSE コード2 THEN
とすれば、条件値が真のときにはコード1が偽のときにはコード2が実行されて、然る後にTHENの後に飛びます。
NIF-THEN構造というのもあります。意味としてはNot IFで、
真理値 NIF コード THEN
とすれば、真理値が偽(0)のときだけ、"コード"が実行されます。
NIF-ELSE-THENという構文も可能です。動作はおわかりになるでしょう。
(N)IF-ELSE-THEN構造は、もちろん、必要なだけ入れ子にすることができます。ただし、一つのワード定義の中であまりに深く入れ子にするのは、コードが読みにくくなるので、よいやり方ではないとされています。
関連項目:
最終更新:2018年12月18日 15:50