途中にテストのあるループ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/07/23 09:22 UTC 版)
「制御構造」の記事における「途中にテストのあるループ」の解説
これは1972年にダールが提案した。 loop loop xxx1 read(char); while test; while not atEndOfFile; xxx2 write(char); repeat; repeat; もし xxx1 が省略されたら、テストが先頭にあるループとなる。もし xxx2 が省略されたら、テストが最後尾にあるループとなる。while が省略されれば無限ループとなる。このような一種類の制御構造で、必要な多くのタイプのループのパターンを表現できることが示されたことから、以降の言語ではこのような汎用性の高いループ構造を持つものもある(VBのDo...Loopなど)。ありうべき派生としてループ内に複数の while テストを配置することを許すことが考えられるが、その場合は後述の exitwhen の方が適切である。 一般に、任意のループ構造と、条件分岐とbreakを組み合わせて、同様のプログラムを書ける(これは要するに、どんな制御構造も、コンパイルされれば機械語では分岐命令になる、ということと同様のことを言っている)。 while (true) { xxx1 if (not test) break xxx2} Adaでは、上記のループ構造(loop-while-repeat)の代替として標準の無限ループ(loop-end loop)内で exit when節を使うことで同様の制御構造を実現できる(後述の exitwhen 文と混同しないよう注意されたい)。 with Ada.Text_IO;with Ada.Integer_Text_IO;procedure Print_Squares is X : Integer;begin Read_Data : loop Ada.Integer_Text_IO.Get(X); exit Read_Data when X = 0; Ada.Text IO.Put (X * X); Ada.Text IO.New_Line; end loop Read_Data;end Print_Squares; ループの命名(この例では Read_Data)は必須ではないが、ループの入れ子で外側のループまで脱出させることができる。
※この「途中にテストのあるループ」の解説は、「制御構造」の解説の一部です。
「途中にテストのあるループ」を含む「制御構造」の記事については、「制御構造」の概要を参照ください。
- 途中にテストのあるループのページへのリンク