ナビゲーション:前へ 上へ 次へ
11.3 データの使用と計算
-
[7.1]
SELECT RANK
構文は、Fortran内で次元数引継ぎ実体の使用を容易にします。 書式は以下の通りです[ construct-name ] SELECT RANK ( [ assoc_name => ] assumed-rank-variable-name ) [ rank-stmt block ]... END SELECT [ construct-name ]
ここでrank-stmtは以下のいずれかです:RANK ( scalar-int-constant-expression ) [ construct-name ] RANK ( * ) [ construct-name ] RANK DEFAULT [ construct-name ]
特定のSELECT RANK
構文では、複数のRANK DEFAULT
文、複数のRANK (*)
文、もしくは複数の 同じ値の整数式を持つRANK (整数)
が存在してはなりません。 次元数引継ぎ変数にALLOCATABLE
またはPOINTER
属性がある場合、RANK(*)
文は許可されていません。整数定数式を使用した
RANK
文に続くblockは、次の場合に実行されます。 次元数引継ぎ変数は、その次元数を持つ非次元数引継ぎの実引数に関連付けられていて、大きさ引継ぎの配列ではありません。 block内では、その次元数の形状引継ぎ配列であるかのように機能します。RANK(*)
に続くblockは、末端引数が大きさ引継ぎの配列である場合に実行されます。 block内では、境界‘(1:*)
’で宣言されているかのように機能します。 境界が異なる場合、または次元数が必要な場合は、連続結合を使用して別の手続きに渡すことができます。RANKDEFAULT
文に続くblockは、他のブロックが選択されていない場合に実行されます。 この場合block内では依然として次元数引継ぎ変数です。つまり、変更はありません。以下に
SELECTRANK
構文の簡単な例を示します。Program select_rank_example Integer :: a = 123, b(1,2) = Reshape( [ 10,20 ], [ 1,2 ] ), c(1,3,1) = 777, d(1,1,1,1,1) Call show(a) Call show(b) Call show(c) Call show(d) Contains Subroutine show(x) Integer x(..) Select Rank(x) Rank (0) Print 1,'scalar',x Rank (1) Print 1,'vector',x Rank (2) Print 1,'matrix',x Rank (3) Print 1,'3D array',x Rank Default Print *,'Rank',Rank(x),'not supported' End Select 1 Format(1x,a,*(1x,i0,:)) End Subroutine End Program
上記は以下を出力します。scalar 123 matrix 10 20 3D array 777 777 777 Rank 5 not supported