配列を等価にする方法

1 つの配列の要素を別の配列の要素と等価にすると,EQUIVALENCE 文は,2 つの配列の他の要素間にも等価関係を設定します。このため,2 つの同じ大きさの配列の最初の要素が等価にされた場合,この 2 つの配列は同じ記憶域を共有することになります。7 つの要素を持つ配列の第 3 の要素が,別の配列の最初の要素と等価にされた場合,最初の配列の残り 5 つの要素は,第 2 の配列の最初の 5 つの要素と重なり合います。

同じ配列の 2 つまたはそれ以上の要素を,1 つまたは複数の EQUIVALENCE 文の中で互いに結合することはできません。たとえば,EQUIVALENCE 文を使って,1 つの配列の最初の要素を別の配列の最初の要素に結合し,最初の配列の第 4 の要素をもう一方の配列の第 7 の要素に結合するというようなことはできません。

次の有効な例を考えてみます。

	DIMENSION TABLE (2,2), TRIPLE (2,2,2)
	EQUIVALENCE(TABLE(2,2), TRIPLE(1,2,2))

これらの文により,配列 TABLE 全体が,TRIPLE に割り付けられた記憶域の一部を共有することになります。次表に,これらの文が配列の位置合わせをどのように行うかを示します。

配列の記憶域の等価関係

配列 TRIPLE 配列 TABLE
配列要素 要素番号 配列要素 要素番号
TRIPLE(1,1,1) 1    
TRIPLE(2,1,1) 2    
TRIPLE(1,2,1) 3    
TRIPLE(2,2,1) 4 TABLE(1,1) 1
TRIPLE(1,1,2) 5 TABLE(2,1) 2
TRIPLE(2,1,2) 6 TABLE(1,2) 3
TRIPLE(1,2,2) 7 TABLE(2,2) 4
TRIPLE(2,2,2) 8    

以下に示す文も,上記の表に示したのと同じように,2 つの配列の位置合わせを行います。

	EQUIVALENCE(TABLE, TRIPLE(2,2,1))
	EQUIVALENCE(TRIPLE(1,1,2), TABLE(2,1))

また,1 以外の下限を使って配列の等価関係を宣言することもできます。たとえば,A(2:3,4) として定義された配列は,8 つの値の列です。A(2,2) という引用は,列内の第 3 の要素を引用します。配列 A(2:3,4) に配列 B(2:4,4) と記憶域を共有させるには,次の文を使用することができます。

	EQUIVALENCE(A(3,4), B(2,4))

配列 A 全体が,配列 B に割り付けられた記憶域の一部を共有します。次表に,これらの文が配列の位置合わせをどのように行うかを示します。配列の位置合わせは以下の文を使っても行えます。

	EQUIVALENCE(A, B(4,1))
	EQUIVALENCE(B(3,2), A(2,2))

1 以外の下限を使った配列の等価関係

配列 A 配列 B
配列要素 要素番号 配列要素 要素番号
B(2,1) 1    
B(3,1) 2    
B(4,1) 3 A(2,1) 1
B(2,2) 4 A(3,1) 2
B(3,2) 5 A(2,2) 3
B(4,2) 6 A(3,2) 4
B(2,3) 7 A(2,3) 5
B(3,3) 8 A(3,3) 6
B(4,3) 9 A(2,4) 7
B(2,4) 10 A(3,4) 8
B(3,4) 11    
B(4,4) 12    

EQUIVALENCE 文中に限って,配列が多次元配列として定義されている場合でも,配列要素を 1 つの添字を使って識別することができます (線形の要素番号)。たとえば,以下の文は,上記の表に示した 2 つの配列の位置合わせを行います。

	DIMENSION B(2:4,1:4), A(2:3,1:4)
	EQUIVALENCE(B(6), A(4))