Fortran では、意外にも定義の先取りができることがままあって、知らないと損します。再帰的な構造体の定義などが典型的なものですが、その他にも微妙なところで気が利いていたりします。
1.配列宣言の初期化での形状サイズの利用。
program test1 implicit none integer :: i, n real :: a(3, 2) = reshape([(real(i), i = 1, 6)], shape(a)) ! <-- shape(a) real :: b(6) print '(2g10.2)', transpose(a) end program test1
実数配列を宣言しますが、その初期化時に右辺で定義する配列の形状・サイズ等 a の属性を利用できます。
実行結果
1.0 4.0 2.0 5.0 3.0 6.0 続行するには何かキーを押してください . . .
2.ファイル入力でのサイズ読み込み (FORTRAN66 時代から可)
program test2 implicit none integer :: i, n real :: a(3, 2) = reshape([(real(i), i = 1, 6)], shape(a)) real :: b(6) ! write(9) size(a), a close(9) read(9) n, (b(i), i = 1, n) ! <-- n print *, b end program test2
ファイルからデータを読み込むときに、読み取ったデータが同一行での implied do loop の中で利用できます。これは、実行時の変数の値の確定順序によるもので、ちょっと見には値不定のような気がしますが、Fortran では規格で許されている利用法です。
実行結果
1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 続行するには何かキーを押してください . . .
他にも色々あると思いますが、すぐには出てこない・・・