fortran - Fortran 中结果变量的用途是什么?

标签 fortran fortran90 fortran95

在 Fortran 中,有两种标准方法可以从函数返回结果。第一个是通过将函数的返回值分配给函数名。

function foo()
    integer :: foo

    foo = 10
end function foo

Fortran 90 中标准化的第二种形式是通过“结果”变量。
function foo result(res)
    integer :: res

    res = 10
 end function foo

调用任一形式的函数都会返回值 10。我的问题是,Fortran 90 委员会引入结果变量的基本原理是什么?他们是否标准化了一种常见的做法?或者他们是否允许程序通过不将函数名称与函数结果绑定(bind)来更加模块化。例如,在 foo() 的第二个版本中, 函数名foo()可以改为bar()并且该函数在调用时仍将按预期工作。

但是,我可能是错的。有谁知道引入结果变量的实际理由是什么?

最佳答案

result同时推出是递归。在我们了解递归函数是如何产生的之前,先澄清一下结果变量是什么。

函数结果总是通过结果变量返回,无论是 result使用与否。1 与 result结果变量具有指定的名称,没有它,结果变量与函数具有相同的名称。在后一种情况下,名称的使用是对结果变量而不是函数的引用。

所以,如果函数 foo有结果变量 foo那么我们不能进行直接递归:

recursive function foo(n)
  foo = foo(n-1) ! Oh dear
end function
result出现这样我们就可以拥有
recursive function foo(n) result(res)
  res = foo(n-1) ! Yay
end function

[1] 嗯,直到 Fortran 2008 之前都是如此,当时变量的定义发生了变化。对于现代 Fortran,使用术语函数结果代替。

关于fortran - Fortran 中结果变量的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31061507/

相关文章:

fortran - 使用常量参数调用函数时出现段错误

python - F2py 无法编译带有私有(private)​​函数的模块

io - FORTRAN 写()

Fortran 90 - 将值从主子例程传输到函数和其他子例程

fortran 模块——查找定义/分配变量的位置

fortran - 作为函数参数的内在函数

audio - 在 Fortran 90/95 中生成声音/蜂鸣声

arrays - 派生类型访问时间与数组访问时间

compilation - f951 错误 : unrecognized command line option

fortran - 作为派生类型组件的指针