配列の配列が欲しくなる時があるのですが、実行時にしかサイズの決まらない場合 Fortran では面倒になります。ポインタを使ってリスト構造を定義してもいいのですが、Fortran の世界ではポインタを使ったら負けに近いので、動的確保や後処理とかをちゃんとやってくれる allocatable な属性を出来るだけ使いたいところです。
しかし、Fortran2003 の範囲ではポインタを使わないと deep copy が発生してしまって、これもまた負けの気がしますが、小さい配列の場合には気にしないことにします。
Fortran では規格が進むごとに、ポインタでしかできなかったことが allocatable 属性で処理できるように進化してきています。f2008 でもリスト構造用のポインタの置き換えができるようになっていますが(いわゆる NEXT を指示するポインタが allocatable 変数で置き換えられる。参照)、intel fortran ではまだ実装されていないようです。
ソース・プログラム
program test implicit none type :: t_list integer, allocatable :: i(:) end type t_list type(t_list), allocatable :: list(:), tmp(:) integer :: i ! do i = 1, 20 tmp = [list, t_list([1:i])] ! deep copy ! [1:i] non-standard call move_alloc(tmp, list) end do ! do i = 1, 20 print '(i3, a, 20i3)', i, ':', list(i)%i end do deallocate(list) stop end program test