変数には、グループの最初の反復で使用される 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 は、start と next の両方の代入に適したターゲットとなるデータ型を持つ変数への参照である必要があります。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 以外のポインターごとに繰り返し実行されます。
説明
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 は、start と next の両方の代入に適したターゲットとなるデータ型を持つ変数への参照である必要があります。start および next は、両方とも、index に代入できるのであれば、任意のデータ型の式にすることができます。
index 参照は、next 値が代入されるたびに完全に再評価されるわけではありません。index で使用されている添え字、ポインター修飾子、または文字列長の元の値は、next 値の後続のすべての代入で使用されます。next 式および test 式は、毎回完全に再評価されます。
index 変数は、配列または構造体であってはなりませんが、配列の要素または構造体のメンバーへの参照であってもかまいません。