Function 具有函数参数的Fortran函数本身具有不同数量的参数
我想写一个Fortran函数,它接受另一个函数作为输入。我知道我可以通过一个接口来实现这一点。从现在起,我将把这两种不同的功能称为“功能”和“接口功能” 假设我的函数只改变接口函数的第一个参数。例如,它可能是一个集成在Function 具有函数参数的Fortran函数本身具有不同数量的参数,function,fortran,arguments,Function,Fortran,Arguments,我想写一个Fortran函数,它接受另一个函数作为输入。我知道我可以通过一个接口来实现这一点。从现在起,我将把这两种不同的功能称为“功能”和“接口功能” 假设我的函数只改变接口函数的第一个参数。例如,它可能是一个集成在x中的集成例程,这是我将传递给它的任何接口函数的第一个参数 我希望能够将具有任意数量参数的接口函数传递给第一个函数,并且能够以某种方式为接口函数所需的任何其他参数设置固定常量值。下面是我想要的东西类型的一个简单示例: PROGRAM test IMPLICIT NONE
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
调用一起编译,并且会在参数列表中抱怨语法错误。但是,如果没有这条线,它可以正常工作
是否有任何方法可以调整代码,以便使用输入h
函数以及输入g
函数调用我的add
函数
请注意,我想到的实际应用程序相对复杂,并且涉及“接口函数”,它们需要在参数列表中包含各种不同类型的函数。另一个不能添加到列表中的函数和tgere更多。直接错误来自语法
h(:,0)
,它不存在。首先,它是一个函数调用,而不是传递函数。其次,不能使用:
调用函数。我希望这些链接展示了足够多的方法来实现这一点。Fortran没有lambda,使用包装器。内部函数或模块函数,这无关紧要。好吧,我可以创建一个新函数wrap_h(x)
,但这需要一个全局变量,然后在新的wrap_h
函数中将值赋给y
。有没有办法在不使用全局变量的情况下创建此包装器?上面的链接显示了如何使用内部函数来创建此包装器。调用函数只有一个局部变量,没有全局变量。我不认为有其他方法没有在上面的链接中讨论。特别是在Fortran中没有捕获变量值的闭包。我真的很想念他们,但他们根本不在。