私は現在、関数を引数として渡すことをいじっています。
以下のプログラムでは、組み込み関数EXP
を積分関数の引数として使用しています。コンパイラで次のエラーが表示されます。
integrate1.f90:22.26:
r = integral(-1.0,1.0,EXP,1000);
1
Error: Expected a procedure for argument 'f' at (1)
EXP
変数の宣言での使用法をコメント解除すると、r
このエラーは発生しません。
したがって、組み込み関数を使用しないと、奇妙な引数として使用できないようです。「組み込み」の原因は、関数がロードされていることを示唆しています。
EXP
関数を明示的に使用せずにこのエラーを防ぐにはどうすればよいですか? USE
組み込みのものをロードするためにステートメントを使用する必要がありますか? これを回避する方法が他にない場合、これが Fortran の仕様によるものなのか、それともコンパイラの問題によるものなのかを知りたいですか?
を使用してGNU Fortran (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3
います。
例:
MODULE MINTEGRATE
CONTAINS
FUNCTION integral(from,to,f,n)
INTERFACE
FUNCTION f(y); REAL, INTENT(IN) :: y; END FUNCTION
END INTERFACE
REAL :: from,to,integral,width;
INTEGER :: n;
width=ABS(to-from)/n;
integral = 0.0;
DO i=0,n
integral = integral+f(from+width*i)*width;
END DO
END
END
PROGRAM INTEGRATE
USE MINTEGRATE;
!PROCEDURE(EXP), POINTER :: f => EXP; ! using the variable f below works without error
REAL :: r!=EXP(0.0);
r = integral(-1.0,1.0,EXP,1000);
WRITE(*,*) r;
END