DO REPEAT 文

説明

DO REPEAT 文は、変数の値に応じて DO グループを繰り返し実行します。

変数には、グループの最初の反復で使用される start 値が代入されます。後続の各反復の前に REPEAT 式が評価され、その結果が変数に代入されます。WHILE オプションが指定されている場合は、最初の反復を含む各反復の前に WHILE 式が評価されます。UNTIL オプションが指定されている場合は、各反復の最後に UNTIL 式が評価されます。WHILE オプションまたは UNTIL オプションが存在しない限り、ループは無制限に繰り返されます。

DO REPEAT 文では、start 式が評価され、索引変数に代入されます。WHILE オプションが指定されている場合は、test 式が評価され、値 b が生成されます。この値は、長さが 1 以上のビット文字列になります(「DO WHILE 文および DO UNTIL 文」セクションを参照してください)。b が偽の場合、対応する END 文に続く文で実行が再開されます。b が真の場合、または WHILE オプションが指定されていない場合、グループの文が実行されます。制御が END 文に達すると、UNTIL オプションが指定されている場合は、test 式が評価され、値 b が生成されます。b が真の場合、対応する END 文に続く文で実行が再開されます。それ以外の場合は、REPEAT オプションに含まれている next 式が評価され、索引変数に代入されます。WHILE オプションがある場合は再度評価されます。値が真の場合、または WHILE が省略されている場合、グループが再度実行されます。

index は、startnext の両方の代入に適したターゲットとなるデータ型を持つ変数への参照である必要があります。start および next は、両方とも、index に代入できるのであれば、任意のデータ型の式にすることができます。

index 参照は、next 値が代入されるたびに完全に再評価されるわけではありません。index で使用されている添え字、ポインター修飾子、または文字列長の元の値は、next 値の後続のすべての代入で使用されます。next 式および test 式は、毎回完全に再評価されます。

index 変数は、配列または構造体であってはなりませんが、配列の要素または構造体のメンバーへの参照であってもかまいません。

DECLARE (HEAD,P) POINTER;
DECLARE 1 NODE BASED;
   2 VALUE FLOAT;
   2 NEXT POINTER;
DO P = HEAD REPEAT(P->NODE.NEXT) WHILE(P^=NULL);
   .
   .
   .
END;

前の DO グループは、ポインター HEAD をルートとするノードのチェーン内にある null 以外のポインターごとに繰り返し実行されます。