OpenBoot 2.x コマンド・リファレンスマニュアル

begin ループ

begin ループは、特定の条件が満たされるまで、同じコマンドの実行を繰り返します。そのようなループのことを条件付きループといいます。

表 4-23に条件付きループの実行制御用のコマンドを示します。

表 4-23 begin(条件付き) ループコマンド

コマンド  

スタックダイアグラム 

説明 

again

( -- ) 

begin...again 無限ループを終了します。

begin

( -- ) 

begin...while...repeatbegin...until、または begin...again ループを開始します。

repeat

( -- ) 

begin...while...repeat ループを終了します。

until

( flag -- ) 

flag が true である間、begin...until ループの実行を続けます。

while

( flag -- ) 

flagが true の間、begin...while...repeat ループの実行を続けます。

次に 2 つの一般的な形式を示します。


begin
			any commands...				flag until

および


begin
			any commands...				flag		while
			more commands						repeat

上記の両方の場合とも、所定のフラグ値によってループが終了させられるまで、ループ内のコマンドが繰り返し実行されます。ループが終了すると、通常、実行はループを閉じているワード (until または repeat) の後のコマンドに継続されます。

beginuntil の場合は、until がスタックの一番上からフラグを削除してそれを調べます。フラグが false の場合は、実行は beginのすぐ後に引き継がれて、ループが繰り返されます。フラグの trueの場合は、実行はループから抜け出ます。

beginwhilerepeat の場合は、while がスタックの一番上からフラグを削除して調べます。フラグが true の場合は、whileのすぐ後のコマンドが実行されてループが繰り返されます。repeatコマンドは制御を自動的に begin に戻してループを継続させます。while が現れたときにフラグが false であった場合は、実行はただちにループから抜け出し、制御がループを閉じている repeat の後の最初のコマンドに移ります。

これらのループのいずれについても、「true ならば通り過ぎる」と覚えると忘れないでしょう。

次に簡単な例を示します。


ok begin 4000 c@ .  key? until (任意のキーが押されるまで繰り返す)
43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43 43
ok 

この例では、ループはまずメモリー位置 4000 から 1 バイトを取り出して表示します。次に、key? コマンドが呼び出され、これが、ユーザーがそれまでにどれかのキーを押していれば true をスタックに残し、そうでない場合は false を残します。このフラグはuntil によって「消費」され、その値が false であった場合は、ループが繰り返されます。キーを押せば、次に呼び出されたとき、key?true を返し、したがってループは終了します。

Forth の多くのバージョンとは異なり、ユーザーインタフェースの場合は、ループや条件付き制御構造を対話的に使用できます。つまり、まず最初に定義を作成する必要がありません。