Fortran 2008 での文法微改良
文字列長を属性的に
%len で宣言長がとれる。
program Console4 implicit none character(10) :: c = 'abc' character(:), allocatable :: d print *, c%len, ':', c d = 'def' print *, d%len, ':', d d = d // 'inition' print *, d%len, ':', d end program Console4
10 :abc 3 :def 10 :definition 続行するには何かキーを押してください . . .
allocatable 属性で可変的な文字列可能。
複素数成分を属性的に
%re, %im で実部・虚部がとれる。
program Console5 implicit none complex(kind(1.0d0)) :: c c = cmplx(0.1d0, 0.1d0) print *, c%re, c%im c = cmplx(0.1d0, 0.1d0, kind(1.0d0)) print *, c%re, c%im end program Console5
0.100000001490116 0.100000001490116 0.100000000000000 0.100000000000000 続行するには何かキーを押してください . . .
落とし穴:cmplx は引数が倍精度でも、デフォルトでは単精度複素数を返す。(歴史的互換性から)
parameterized derived type の属性
デフォルト値を与えておくと省略可能。オプショナル引数的な扱い。
program Console6 implicit none type :: t_test(kind, leng) integer, kind :: kind = 8 integer, len :: leng =10 real(kind) :: x(leng) end type t_test type(t_test) :: a type(t_test(4)) :: b type(t_test(leng=5)) :: c print *, a%kind, a%leng print *, b%kind, b%leng print *, c%kind, c%leng c = t_test(leng = 5)(1.0) print *, 'c=' print *, c end program Console6
8 10 4 10 8 5 c= 1.00000000000000 1.00000000000000 1.00000000000000 1.00000000000000 1.00000000000000 続行するには何かキーを押してください . . .
print * の時は、データ部のみ出力。
Introduction to Programming with Fortran: With Coverage of Fortran 90, 95, 2003, 2008 and 77
- 作者: Ian Chivers,Jane Sleightholme
- 出版社/メーカー: Springer
- 発売日: 2015/08/17
- メディア: ペーパーバック
- この商品を含むブログを見る
Modern Fortran Explained (Numerical Mathematics and Scientific Computation)
- 作者: Michael Metcalf,John Reid,Malcolm Cohen
- 出版社/メーカー: Oxford Univ Pr
- 発売日: 2011/05/19
- メディア: ペーパーバック
- この商品を含むブログを見る