Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran中结果变量的用途是什么?_Fortran_Fortran90_Fortran95 - Fatal编程技术网

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

Fortran中结果变量的用途是什么?,fortran,fortran90,fortran95,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

在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
,函数结果始终通过结果变量返回。1使用
result
时,结果变量具有指定的名称,没有该名称时,结果变量与函数具有相同的名称。在后一种情况下,名称的使用是对结果变量的引用,而不是对函数的引用

因此,如果函数
foo
具有结果变量
foo
,则我们不能进行直接递归:

recursive function foo(n)
  foo = foo(n-1) ! Oh dear
end function
结果
来了,这样我们就可以

recursive function foo(n) result(res)
  res = foo(n-1) ! Yay
end function


[1] 直到Fortran 2008年,变量的定义发生了变化,这才是事实。对于现代Fortran,请使用“函数结果”一词。

请注意,如果您只想更改函数的名称,则使用“结果”时无需更改函数体,因此更方便convenient@AnthonyScemama是的,我想我在问题中提到过。那么它主要是用于递归函数吗?它需要允许递归函数,但在函数定义中提供更易于管理的名称时也很有用:
function long\u和\u descriptive\u function\u name()result(res)