反復 DO 文

説明

反復 DO 文では、DO グループの実行を制御する値を持つ変数を指定し、その制御変数が変更およびテストされる条件を定義します。

反復 DO が実行されると、startfinishincrement の各式と index 参照が不特定の順序で評価されます。finish および increment の値は、いったん評価されるとグループの実行が終わるまで使用され、再評価されることはありません。index 参照の添え字やポインターなども再評価されません。

start 値は、必要に応じて index 変数のデータ型に変換され、変換された値が index 変数に代入されます。

WHILE オプションが指定されている場合は、test-expression が評価され、値 b が生成されます。この値は、長さが 1 以上のビット文字列になります(「DO WHILE 文および DO UNTIL 文」セクションを参照してください)。b が偽の場合、END 文に続く文で実行が再開されます。

b が真の場合、または WHILE オプションが指定されていない場合、index 変数の値が finish 値と比較されます。increment が正またはゼロで、index 値が finish 値より大きい場合は、END 文に続く文で実行が再開されます。

increment が負で、index 値が finish 値より小さい場合は、END 文に続く文で実行が再開されます。

上記のいずれの条件でもグループの実行が終了しない場合は、グループの文が実行されます。UNTIL オプションが指定されている場合は、test-expression が評価され、値 b が生成されます。この値は、長さが 1 のビット文字列になります。b が真の場合は、END 文に続く文で実行が再開され、increment 値が index 変数に追加されて、WHILE テストが再評価されます。b および index の新しい値を使用して、グループを再度実行する必要があるかどうかが判定されます。

TO オプションおよび BY オプションは、WHILE オプションまたは UNTIL オプションの前に任意の順序で指定できます。TO または BY のいずれかのオプションを省略できます。BY オプションを省略した場合は、デフォルトのインクリメントである 1 が指定されます。TO オプションを省略した場合は、index が finish と比較されないため、WHILE オプションまたは UNTIL オプションによって停止されない限りグループが無限に繰り返されます。TO オプションと WHILE オプションの両方を省略すると、DO グループが無限に繰り返されます。WHILE と UNTIL の両方のオプションを指定することもできます。

DO K = 1 TO 10;
   .
   .  /* EXECUTES 10 TIMES */ 
   .
END;

DO K = 10 TO 1 BY -1;
   .
   .  /* EXECUTES 10 TIMES */
   . 
END;

DO K = 1 TO 1 BY -1;
   .
   .  /* EXECUTES 1 TIME */ 
   .
END;

DO K = 1 TO 10 WHILE(B<0);
   .
   .
   .
END;

この例では、DO グループが、10 回実行されるか B ≥ 0 になるまで実行されます。

DO A(J) = B+1 TO N BY -M WHILE(T);
   .
   .
   .
END;

この例では、DO グループが、[B-N+2/M] 回実行されるか T が偽になるまで実行されます。DO グループのすべての実行に A の同じ要素が index として使用されます。これは、グループの実行によって J が変更されても変わりません。また、すべての実行で B+1、N、および -M が初期値として使用されます。一方、T は繰り返し評価されます。