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

Gio*_*iuc 9 fortran fortran90 fortran95

在Fortran中,有两种标准方法可以从函数返回结果.第一种方法是将函数的返回值赋给函数名.

function foo()
    integer :: foo

    foo = 10
end function foo
Run Code Online (Sandbox Code Playgroud)

在Fortran 90中标准化的第二种形式是通过"结果"变量.

function foo result(res)
    integer :: res

    res = 10
 end function foo
Run Code Online (Sandbox Code Playgroud)

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

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

fra*_*lus 14

同时由于引入result递归.在我们了解递归函数是如何产生之前,对结果变量的含义进行一些澄清.

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

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

recursive function foo(n)
  foo = foo(n-1) ! Oh dear
end function
Run Code Online (Sandbox Code Playgroud)

result 我们可以拥有

recursive function foo(n) result(res)
  res = foo(n-1) ! Yay
end function
Run Code Online (Sandbox Code Playgroud)

[1]嗯,直到Fortran 2008,变量的定义发生了变化.对于现代Fortran而言,使用术语函数结果.

  • 它需要允许递归函数,但对于在函数定义中提供更易于管理的名称也很有用:“function long_and_descriptive_function_name () result(res)”。 (6认同)