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

时间:2018-05-15 02:48:36

标签: function fortran arguments

我想编写一个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函数吗?

请注意,我想到的实际应用程序相对复杂,并且涉及“接口功能”。在他们的参数列表中需要各种不同的类型。

0 个答案:

没有答案