do〜loop構文(do区) ☆☆☆

 DO 〜 LOOP 構文では,DO行とLOOP行に挟まれた各文が繰り返し実行される。
例1

10 ! 無限に繰り返す
20 LET a=0
30 DO
40    PRINT a
50    LET a=a+1
60 LOOP
70 END


DO WHILE
 DO文にWHILE句を書くと,WHILE句に書かれた条件(論理式)が真である間,DO行とLOOP行に挟まれた各文が繰り返し実行される。条件が偽になると,LOOP行の次の行に進む。最初から条件が偽であれば,DO行とLOOP行の間の各文は1回も実行されない。
例2

10 INPUT n
20 LET i=1
30 DO WHILE i<=n
40    PRINT i
50    LET i=i+1
60 LOOP
70 END


DO UNTIL
 DO文にUNTIL句を書くと,UNTIL句に書かれた条件が偽である間,DO行とLOOP行に挟まれた各文が繰り返し実行される。条件が真になると,LOOP行の次の行に進む。最初から条件が真であれば,DO行とLOOP行の間の各文は1回も実行されない。
例3 (例2と等価)

10 INPUT n
20 LET i=1
30 DO UNTIL i>n
40    PRINT i
50    LET i=i+1
60 LOOP
70 END


LOOP WHILE
 LOOP文にWHILE句を書くと,DO行とLOOP行に挟まれた各文を実行した後,WHILE句に書かれた条件をテストする。その結果が真であれば,DO行から再び実行を開始する。結果が偽であれば,LOOP行の次の行に進む。
例4

10 INPUT n
20 LET i=1
30 DO 
40    PRINT i
50    LET i=i+1
60 LOOP WHILE i<=n
70 END

 nに1以上の数を入力する場合には,例2と例4とで動作に違いは生じない。しかし,nに0を入力すると例2では40行と50行は1回も実行されないのに対し,例4では40行と50行は実行される。

LOOP UNTIL
 LOOP文にUNTIL句を書くと,DO行とLOOP行に挟まれた各文を実行した後,UNTIL句に書かれた条件をテストする。その結果が偽であれば,DO行から再び実行を開始する。結果が真であれば,LOOP行の次の行に進む。
例5 (例4と等価)

10 INPUT n
20 LET i=1
30 DO
40    PRINT i
50    LET i=i+1
60 LOOP UNTIL i>n
70 END


EXIT DO文
 EXIT DO文を実行すると,LOOP文の次の行に分岐する。通常,IF文と組み合わせて用いる。
例6

10 INPUT n
20 LET i=1
30 DO 
40    PRINT i
50    IF i>=n THEN EXIT DO
60    LET i=i+1
70 LOOP
80 END


 IF … THEN EXIT DO をDO文の直後,あるいは,LOOP文の直前に書けば,それぞれ,DO UNTIL …,LOOP UNTIL … と等価になる。
例7 (例3と等価)

10 INPUT n
20 LET i=1
30 DO 
40    IF i>n THEN EXIT DO 
50    PRINT i
60    LET i=i+1
70 LOOP
80 END

例8 (例5と等価)

10 INPUT n
20 LET i=1
30 DO
40    PRINT i
50    LET i=i+1
60    IF i>n THEN EXIT DO
70 LOOP
80 END


 DO〜LOOPが2重,3重の入れ子になっている場合には,EXIT DO文の実行は最も内側の DO〜LOOPからの脱出を意味する。たとえば,

10 DO
20   ……
30    DO
40       ……
50       EXIT DO
60       ……
70    LOOP
80    ……
90 LOOP
100 ……

で50行のEXIT DOを実行すると,80行に分岐する。50行の位置から100行に分岐したい場合は,GOTO文を利用する。

<参考> 十進BASIC Q&A 多重ループから抜ける方法