作为输出参数的函数

Ada*_*yes 7 fortran function output

我想创建一个子程序,将函数作为输出返回.我怎样才能做到这一点?我会举一个例子,说明我认为它应该如何(我知道它写的很糟糕)

module fun_out

contains

subroutine exponential(F,a)
     interface, intent(out)

        function f(x)
         real, intent(in)::x
         real :: f(2)
        end function
     end interface
     real,intent(in):: a

   F=exp(a*x)

end subroutine exponential

end module
Run Code Online (Sandbox Code Playgroud)

有了这个,我应该从输出中的指数族中获取一个函数.

Vla*_*r F 3

您必须返回一个函数指针。这可以在 Fortran 2003 中完成。

   procedure(name_of_interface), pointer :: f
Run Code Online (Sandbox Code Playgroud)

然而,您不能期望完整的词法范围闭包,而只是纯指针。

您必须将程序准备为正常的外部程序、模块或 F2008 甚至内部程序(有一些限制),然后指向它:

    f => my_function
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您有 argument a,并且您似乎想将其用作捕获的闭包变量。这在 Fortran 语言中是不可能的。您要么必须每次都将其传递给函数,要么使用 Functor 模式(保存捕获的参数的派生类型),或者使用内部过程(但这仅在其宿主过程内部有效)。