在 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()
并且该函数在调用时仍会按预期工作。
然而,我可能是错的。有谁知道引入结果变量的实际理由是什么?
与此同时推出result
was 递归。在我们了解递归函数是如何产生之前,先澄清一下结果变量是什么。
The function result is always returned through a result variable, whether result
is used or not.1 With result
the result variable has the name specified, and without it the result variable has the same name as the function. In this latter case use of the name is a reference to the result variable and not the function.
所以,如果函数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 之前都是如此,当时定义了variable改变了。对于现代 Fortran,请使用术语函数结果.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)