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文を利用する。