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

时间:2015-06-25 21:58:19

标签: 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委员会引入结果变量的理由是什么?他们是否标准化了一种常规做法?或者他们通过不将函数名称绑定到函数结果来允许程序更加模块化。例如,在foo()的第二个版本中,函数foo()的名称可以更改为bar(),并且该函数在调用时仍将按预期工作。

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

1 个答案:

答案 0 :(得分:11)

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,请使用术语功能结果