配列コンストラクターとは、指定されたスカラー値の順序列のことです。 配列コンストラクターは、そのエレメント値が順序列内で指定されたランク 1 の配列を構成します。
>>-(/--ac_value_list--/)--------------------------------------->< |
ac_value は次のようになります。
配列コンストラクターのデータ型は、ac_value_list 式のデータ型と同じです。 配列コンストラクター内のすべての式が定数式である場合、その配列コンストラクターは定数式になります。
1 より大きいランクの配列を構成するには、組み込み関数を使用します。 詳細については、RESHAPE(SOURCE, SHAPE, PAD, ORDER)を参照してください。
INTEGER, DIMENSION(5) :: A, B, C, D(2,2) A = (/ 1,2,3,4,5 /) ! Assign values to all elements in A A(3:5) = (/ 0,1,0 /) ! Assign values to some elements C = MERGE (A, B, (/ T,F,T,T,F /)) ! Construct temporary logical mask ! The array constructor produces a rank-one array, which ! is turned into a 2x2 array that can be assigned to D. D = RESHAPE( SOURCE = (/ 1,2,1,2 /), SHAPE = (/ 2,2 /) ) ! Here, the constructor linearizes the elements of D in ! array-element order into a one-dimensional result. PRINT *, A( (/ D /) )
配列コンストラクター内の暗黙 DO ループは、各エレメントを個々に指定することを避けるために、 値の定期的または周期的な順序列を作成するのに役立ちます。
ループによって生成された値の順序列が空の場合、ランクが 1 のゼロ・サイズ配列が形成されます。
>>-(--ac_value_list--,--implied_do_variable-- = --expr1--,--expr2--> >--+----------+--)--------------------------------------------->< '-,--expr3-' |
XL Fortran では、
implied_do_variable は実数式です。
実行不能ステートメントでは、 型は整数でなければなりません。制限式 expr1 または expr2 では、implied_do_variable の値を参照しないでください。 このループ処理では、DATAにある暗黙 DO に対する規則と同じ規則に従い、暗黙 DO 変数の 型に基づいて、整数または実際の演算を使用します。
変数は、暗黙 DO の有効範囲を持ちますが、指定する配列コンストラクターの暗黙 DO の中に 別の暗黙 DO と同じ名前が入っていてはなりません。
M = 0 PRINT *, (/ (M, M=1, 10) /) ! Array constructor implied-DO PRINT *, M ! M still 0 afterwards PRINT *, (M, M=1, 10) ! Non-array-constructor implied-DO PRINT *, M ! This one goes to 11 PRINT *, (/ ((M, M=1, 5), N=1, 3) /) ! The result is a 15-element, one-dimensional array. ! The inner loop cannot use N as its variable.
+----------------------------------IBM 拡張----------------------------------+
XL Fortran では、expr1、expr2、および expr3 は実数式となります。
+------------------------------End of IBM 拡張-------------------------------+
PRINT *, (/ (I, I = 1, 3) /) ! Sequence is (1, 2, 3) PRINT *, (/ (I, I = 1, 10, 2) /) ! Sequence is (1, 3, 5, 7, 9) PRINT *, (/ (I, I+1, I+2, I = 1, 3) /) ! Sequence is (1, 2, 3, 2, 3, 4, 3, 4, 5) PRINT *, (/ ( (I, I = 1, 3), J = 1, 3 ) /) ! Sequence is (1, 2, 3, 1, 2, 3, 1, 2, 3) PRINT *, (/ ( (I, I = 1, J), J = 1, 3 ) /) ! Sequence is (1, 1, 2, 1, 2, 3) PRINT *, (/2,3,(I, I+1, I = 5, 8)/) ! Sequence is (2, 3, 5, 6, 6, 7, 7, 8, 8, 9). ! The values in the implied-DO loop before ! I=5 are calculated for each iteration of the loop.