Fortran90(do~cycle)

旧2-5. Fortran毎日学習

Fortranです。DO CYCLEを使います。
DOの繰り返しを終了するのがEXITでした。前回作ったプログラムのEXITをCYCLEに変えて実行してみます。

takk@deb9:~$ cat do-cycle.f90
      PROGRAM MAIN
        DO I=1,2
          DO J=1,3
            IF(J.EQ.2)CYCLE
            WRITE(*,*) I,J
          END DO
        END DO
        STOP
      END
takk@deb9:~$ gfortran do-cycle.f90
takk@deb9:~$ ./a.out
           1           1
           1           3
           2           1
           2           3
takk@deb9:~$

次は外側のDOにラベルを付けて、CYCLEで指定してみます。

takk@deb9:~$ cat do-cycle2.f90
      PROGRAM MAIN
        OUTER: DO I=1,2
          DO J=1,3
            IF(J.EQ.2)CYCLE OUTER
            WRITE(*,*) I,J
          END DO
        END DO OUTER
        STOP
      END
takk@deb9:~$ gfortran do-cycle2.f90
takk@deb9:~$ ./a.out
           1           1
           2           1
takk@deb9:~$

あれ、この動きはEXITと同じなのでは。

takk@deb9:~$ cat do-exit.f90
      PROGRAM MAIN
        DO I=1,2
          DO J=1,3
            IF(J.EQ.2)EXIT
            WRITE(*,*) I,J
          END DO
        END DO
        STOP
      END
takk@deb9:~$ gfortran do-exit.f90
takk@deb9:~$ ./a.out
           1           1
           2           1
takk@deb9:~$

まったく同じですね。

ところで他の言語はどう書くのでしょう。Pythonで同じようなプログラムを書いてみます。

takk@deb9:~$ cat break.py
for i in range(1,3):
  for j in range(1,4):
    if j == 2:
      break
    print i,j

takk@deb9:~$ python break.py
1 1
2 1
takk@deb9:~$ vi break.py
takk@deb9:~$ cp break.py continue.py
takk@deb9:~$ vi continue.py
takk@deb9:~$ cat continue.py
for i in range(1,3):
  for j in range(1,4):
    if j == 2:
      continue
    print i,j

takk@deb9:~$ python continue.py
1 1
1 3
2 1
2 3
takk@deb9:~$

Fortranのexitが、Pythonのbreakで、Fortranのcycleが、Pythonのcontinueですね。
PythonのこのキーワードはC言語から派生してきたのでしょうか。exitとcycleよりも、breakとcontinueの方が分かりやすい気がします。

コメント

タイトルとURLをコピーしました