Fortran语句函数的用法

5

我了解关于语句函数的知识,例如以下示例:

C(F) = 5.0*(F - 32.0)/9.0

这不就相当于:
C = 5.0*(F - 32.0)/9.0

也就是说,没有函数部分,或者我漏掉了什么?

如果它们不相同,那么我什么时候需要使用语句函数?

1个回答

10
C = 5.0*(F - 32.0)/9.0

只是将值赋给一个变量C,可以放在任何位置,并且每次程序流到达时都会被计算一次。

C(F) = 5.0*(F - 32.0)/9.0

C(100)是一个语句函数,可以在其作用域内随时进行评估,例如返回大约值为37.8

从一些代码中

  xx(i) = dx*i

  f(a) = a*a

  do i = 1, nx
     x = xx(i)
     print *, f(x)
  end do

在打印语句中,f(x) 随着每个新的 x 值进行评估并产生一个新值。变量 x 的值也是先前行中语句函数 xx 评估的结果。

但是语句函数现在(在Fortran 95中)已经被宣布为过时。在任何新代码中最好使用内部函数。例如:

program p
  implicit none
  !declarations of variables x, i, nx, dx

  do i = 1, nx
     x = xx(i)
     print *, f(x)
  end do
contains

  real function xx(i)
    integer, intent(in) :: i
    xx = dx*i
  end function

  real function f(a)
    real, intent(in) :: a
    f = a*a
  end function
end program

4
“但语句函数现在被宣布为过时。” 这是我所需要的,谢谢。 - Sqrs
1
我想知道它们为什么已经过时了。这似乎是一个有用的语言特性。 - John Alexiou
4
声明混乱并在范围内引入不必要的变量。内部函数更具普适性。真正有用的是现代的lambda表达式和闭包,而不是这个。 - Vladimir F Героям слава

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接