我想编写一个Fortran函数,它将另一个函数作为输入。我知道我可以通过界面来做到这一点。从现在开始,我将这两个不同的功能称为'功能'以及' interfaced功能'。
想象一下,我的函数只改变了interfaced函数的第一个参数。例如,它可能是一个集成在x
中的集成例程,它是我传递给它的任何接口函数的第一个参数。
我希望能够将带有任意数量参数的接口函数传递给第一个函数,并且能够以某种方式为接口函数所需的任何其他参数设置固定常量值。我想要的事物类型的最小例子如下:
PROGRAM test
IMPLICIT NONE
!This works
WRITE(*,*) add(g)
!This does not work
WRITE(*,*) add(h(:,0.))
CONTAINS
REAL FUNCTION add(f)
IMPLICIT NONE
INTERFACE
REAL FUNCTION f(x)
REAL, INTENT(IN) :: x
END FUNCTION f
END INTERFACE
add=f(1.)+f(2.)
END FUNCTION add
REAL FUNCTION g(x)
IMPLICIT NONE
REAL, INTENT(IN) :: x
g=x**2
END FUNCTION g
REAL FUNCTION h(x,y)
IMPLICIT NONE
REAL, INTENT(IN) :: x, y
h=x**2+y**2
END FUNCTION h
END PROGRAM test
上面的代码不会在主程序中使用第二个add
调用进行编译,并且会在参数列表中抱怨语法错误。但是,没有这条线就可以正常工作。
我有什么方法可以调整我的代码,以便我可以使用输入add
函数以及输入h
函数调用我的g
函数吗?
请注意,我想到的实际应用程序相对复杂,并且涉及“接口功能”。在他们的参数列表中需要各种不同的类型。