目的
 
		 
		繰り返し実行することもできるグループとして実行される一連の文を開始します。
 
	  
 
	 構文
 
		 
		DO [while-until-spec]|[index = iteration-spec[,iteration-spec]…]| FOREVER | LOOP;
 
		ここで、while-until-spec は次のようになります。
 
		WHILE(test-expression)[UNTIL(test-expression)] 
 
		または
 
		UNTIL(test-expression)[WHILE(test-expression)]
 
		ここで、
 
		iteration-spec は次のようになります。
 
		start[to-by-spec|repeat-spec][while-until-spec] 
 
		ここで、
 
		to-by-spec は次のようになります。
 
		TO finish[BY increment]
 
		または
 
		BY increment[TO finish]
 
		ここで、repeat-spec は次のようになります。
 
		REPEAT next
 
	  
 
	 パラメーター
 
		 
		 
		   
			 - test-expression
 
 
			 - 長さが 1 以上のビット文字列のスカラー値に評価される任意の式。test-expression は、値のビットのいずれかが 1 である場合は真となり、それ以外の場合は偽となります。test-expression はかっこで囲む必要があります。
 
 
		   
		
 
		 
		   
			 - index 
 
 
			 - スカラー変数への参照。
 
 
		   
		
 
		 
		   
			 - start、next、finish、increment
 
 
			 - index に代入可能な式。
 
 
		   
		
 
	  
 
	 
 
   
 
説明
DO 文は、グループで実行される一連の文を開始します。グループは実行不可能な文 END で終了します。
DO グループは DO 文の制御下で可変回数実行されます。
DO 文は、ON-unit として使用することはできませんが、IF 文の THEN 句または ELSE 句を含めて、あるいは WHEN 句または OTHERWISE 句のオブジェクトとして、手続き内または BEGIN ブロック内の任意の場所に記述できます。
これは無限ループになります。GOTO 文または LEAVE 文を使用するか、プログラムを終了する以外に、このループを終了する方法はありません。
これも同じです。
DCL I FIXED BIN (15); ON CONVERSION BEGIN; PUT SKIP LIST ('Conversion triggered'); STOP; END; DO FOREVER; GET LIST (I) ; PUT LIST (I) ; PUT SKIP; IF I = 0 THEN LEAVE; END;以下のセクションでは、各 DO 文について説明します。これらすべての説明では、グループの文が 1 回、2 回、n 回といったように実行される場合に、DO グループからグループ外に制御が渡されることも、グループ内の文がスキップされることもないと想定できます。ただし、DO グループには、IF 文、その他の DO グループ、RETURN 文、実行順序を変更する GOTO 文を含めることができます。
単純ではない DO グループについては、DO グループの DO 文を実行する以外の方法でその DO グループに最初に制御を渡すことはできません。また、手続き呼び出しまたは関数呼び出し以外の方法で単純ではない DO グループから外部に制御が移された場合は、一般に、そのグループに制御を戻すことはできません。この規則に違反すると、予期しない結果になります。