Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 具有函数参数的Fortran函数本身具有不同数量的参数_Function_Fortran_Arguments - Fatal编程技术网

Function 具有函数参数的Fortran函数本身具有不同数量的参数

Function 具有函数参数的Fortran函数本身具有不同数量的参数,function,fortran,arguments,Function,Fortran,Arguments,我想写一个Fortran函数,它接受另一个函数作为输入。我知道我可以通过一个接口来实现这一点。从现在起,我将把这两种不同的功能称为“功能”和“接口功能” 假设我的函数只改变接口函数的第一个参数。例如,它可能是一个集成在x中的集成例程,这是我将传递给它的任何接口函数的第一个参数 我希望能够将具有任意数量参数的接口函数传递给第一个函数,并且能够以某种方式为接口函数所需的任何其他参数设置固定常量值。下面是我想要的东西类型的一个简单示例: PROGRAM test IMPLICIT NONE

我想写一个Fortran函数,它接受另一个函数作为输入。我知道我可以通过一个接口来实现这一点。从现在起,我将把这两种不同的功能称为“功能”和“接口功能”

假设我的函数只改变接口函数的第一个参数。例如,它可能是一个集成在
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中没有捕获变量值的闭包。我真的很想念他们,但他们根本不在。