fortran66のブログ

fortran について書きます。

ASSOCIATE その他

Fortran90 になってから文法が Pascal っぽく型に厳しくなって、文法エラーが出なくなれば、意味不明な実行時エラーも出にくくなっていたわけですが、Fortran2003 になるとまた実行時エラーが増えそうな微妙な仕様が多くなっています。実行時にバインドされるようなオブジェクト指向機能があるから仕方ないのかもしれませんが。慣れるまでは大変な気がします。

配列コンストラクターを使って宣言時に配列に初期値を与えられるのですが、そこでの内部 DO-LOOP 変数に、その行以前に宣言した整数変数が使えるようです。但し、プログラム実行時に LOOP 変数の終了値は任意になっているようです。便利でしょうが、首を傾げたくなる微妙な仕様だと思います。

ASSOCIATE も、BLOCK 内で別名が使えるということで便利そうなのですが、別名の変数型やスカラー/配列の違いやが明示されることが無く、また ASSOCIATE BLOCK 外との名前の重複などが許されているなど、バグの温床になりそうな仕様になっているようです。

Fortran2003 時代も思ったより明るくないのかもしれませんですw

実行結果

ソースコード

PROGRAM test
IMPLICIT NONE
INTEGER :: i
REAL :: x(10) = [(REAL(i), i = 1, 10)]
PRINT *, 'i=', i
PRINT *, x
i = 1
ASSOCIATE( y => 4.0 * ATAN(REAL(i)), ww => SIN(0.5 * y * x), x => 10, q => 10*3 )
 PRINT *, y
 PRINT *, x, q
 PRINT *, ww
END ASSOCIATE
STOP
END PROGRAM test