WHILE オプションや UNTIL オプションを使用すると、指定の条件に従って、 DO グループを連続的に実行することができます。例えば、次のようになります。
do while (A=B);
·
·
·
end;
これは、次のように書く場合と同等です。
S: if A=B then; else goto R;
·
·
·
goto S; R: next statement
さらに、
do until (A=B);
·
·
·
end;
これは、次のように書く場合と同等です。
S:
·
·
·
if (A=B) then goto R; goto S; R: next statement
ほかのオプションが付いていない限り、DO UNTIL ステートメントで始まる DO グループは最低 1 回は実行されますが、DO WHILE ステートメントで始まる DO グループは 1 回も実行されないことがあります。 つまり、ステートメントの DO WHILE (A=B) と DO UNTIL (A¬=B) は、同じではないということです。
次の例では、DO ステートメントに最初に制御が 到達したときに A¬=B であれば、 DO グループは 1 回も実行されません。
do while(A=B) until(X=10);
ただし、A=B であれば、DO グループは実行されます。 DO グループの実行後、X=10 であれば、それ以上実行されません。 X=10 でない場合は、A がまだ B に等しい限り、さらに実行されます。
次の例では、DO グループは最低 1 回は実行され、 そのとき I は 1 です。
do I=1 to 10 until(Y=1);
DO グループの実行後、Y=1 であれば、それ以上実行されません。 Y=1 でない場合は、デフォルトの増分値 (BY 1) が I に 加算され、I の新しい値が 10 と比較されます。 I が 10 より大きいときは、それ以上実行されませんが、 そうでないときは、新たに実行されます。
次のステートメントは、 C(I) がゼロより小さければ DO グループを 10 回実行し、 次に A が B に等しい場合にのみ、 もう 1 回実行することを指定しています。
do I = 1 to 10 while (C(I)<0),
11 while (A = B);