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而言,使用术语函数结果.
归档时间: |
|
查看次数: |
2318 次 |
最近记录: |