総称組込み関数引用

COS 総称組込み関数名には,余弦を計算する個別組込み関数が 6 つあります (COSDCOSQCOSCCOSCDCOS,および CQCOS)。これらの関数は,それぞれ REAL(4)REAL(8)REAL(16) (VMS と U*X),COMPLEX(4)COMPLEX(8),および COMPLEX(16) (VMS と U*X) の異なる値を返します。

COS 総称名を使って余弦関数を呼び出すと,コンパイラは指定された引数に基づいて適切なルーチンを選択します。たとえば,引数が REAL(4) ならば COS が選択され,REAL(8) ならば DCOS が選択され,COMPLEX(4) ならば CCOS が選択されます。

また,特定のルーチンを明示的に引用することも可能です。たとえば,DCOS を宣言することで,倍精度余弦関数を呼び出すことができます。

手続選択は,個々の総称引用でそれぞれ独立に行われます。このため,同じプログラム単位で,異なる組込み手続を参照するために総称引用を繰り返して使うことができます。

総称関数名は,以下のように使った場合,組込み手続の選択には使用できません。

組込み関数を手続への実引数として渡すときには,その個別名を使用しなくてはならず,呼び出すときには,その引数はスカラでなくてはなりません。個別組込み関数の中には,実引数としては使用できないものがあります (詳細については,「実引数として許されていない関数:表」を参照してください)。

総称手続名は,それを引用するプログラム単位に対して局所的なので,他のプログラム単位では別の用途に使用することができます。

通常,組込み手続名は,その名前を持つ Fortran 95/90 ライブラリー手続を引用します。ただし,名前が EXTERNAL 文で指定されている場合,ユーザー定義手続を引用することができます。


注意:組込み手続を呼び出すときに,引数の数や型を間違えた場合,コンパイラは外部手続が引用されているものと仮定します。たとえば,SIN 組込み手続は 1 つの引数を取ります。SIN(10,4) のように 2 つの引数を宣言すると,コンパイラは SIN が組込み手続ではなく外部手続であると仮定します。

EXTERNAL 文で使用される場合を除き,組込み手続名はそれらを引用するプログラム単位に対して局所的なので,他のプログラム単位では他の用途に使用することができます。組込み手続のデータ型は,IMPLICIT 文を使って暗黙のデータ型規則を変更しても変わりません。

組込み手続とユーザー定義手続は,同じプログラム単位にある場合,同じ名前を持つことはできません。

以下の例は,組込み関数名の局所および大域プロパティを示しています。これは SIN 組込み関数を次のように使用しています。

組込み関数名の使用と再定義

	!	正弦の計算方法の比較
		PROGRAM SINES
		  DOUBLE PRECISION X, PI
		  PARAMETER (PI=3.141592653589793238D0)
		  COMMON V(3)

	!	  文関数として SIN を定義 
		  SIN(X) = COS(PI/2-X)
		  DO X = -PI, PI, 2*PI/100
	!	    文関数 SIN を引用 
		    WRITE (6,100) X, V, SIN(X)
		  END DO
		  CALL COMPUT(X)
	100	  FORMAT (5F10.7)
		END

		SUBROUTINE COMPUT(Y)
		  DOUBLE PRECISION Y
	!	  実引数として SIN 組込み関数を使用 
		  INTRINSIC SIN
		  COMMON V(3)
	!	  総称引用を倍精度正弦に定義 
		  V(1) = SIN(Y)
	!	  実引数として SIN 組込み関数を使用 
		  CALL SUB(REAL(Y),SIN)
		END

		SUBROUTINE SUB(A,S)
	!	  ユーザー定義関数名として SIN を宣言 
		  EXTERNAL SIN
	!	  DOUBLE PRECISION 型で SIN を宣言 
		  DOUBLE PRECISION SIN
		  COMMON V(3)
	!	  SIN 組込み関数を評価 
		  V(2) = S(A)
	!	  ユーザー定義関数 SIN を評価 
		  V(3) = SIN(A)
		END

	!	ユーザー定義関数 SIN を定義 
		DOUBLE PRECISION FUNCTION SIN(X)
		  INTEGER FACTOR
		  SIN = X - X**3/FACTOR(3) + X**5/FACTOR(5) &
		        - X**7/FACTOR(7)
		END

		INTEGER FUNCTION FACTOR(N)
		  FACTOR = 1
		  DO I=N,1,-1
		    FACTOR = FACTOR * I
		  END DO
		END
SIN という名前の文関数が,COS 総称関数名をもとに定義されています。COS の引数は倍精度なので,倍精度余弦関数が評価されます。文関数 SIN そのものは単精度です。
SIN 文関数が呼び出されます。
SIN という名前が組込み関数として宣言されています。これにより,単精度の組込み正弦関数を,5 で実引数として渡すことができます。
SIN 総称関数名が,倍精度の正弦関数を引用するために使用されています。
単精度組込み正弦関数が実引数として使用されています。
SIN という名前がユーザー定義関数名として宣言されています。
SIN が倍精度型として宣言されています。
5 で渡された単精度正弦関数が評価されています。
ユーザー定義関数 SIN が評価されています。
ユーザー定義関数 SIN が,階乗を計算するユーザー定義関数 FACTOR を使って,単純 Taylor 系列として定義されています。

関連情報