使用Fortran语句函数

Sqr*_*qrs 2 fortran fortran90

我读了一下语句函数,例如:

C(F) = 5.0*(F - 32.0)/9.0
Run Code Online (Sandbox Code Playgroud)

这不是:

C = 5.0*(F - 32.0)/9.0
Run Code Online (Sandbox Code Playgroud)

即没有功能部分,或者我可能缺少某些东西?

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

Vla*_*r F 7

C = 5.0*(F - 32.0)/9.0
Run Code Online (Sandbox Code Playgroud)

只是赋值给变量C,它可以在任何地方,每次程序流到达时都会被评估一次.

C(F) = 5.0*(F - 32.0)/9.0
Run Code Online (Sandbox Code Playgroud)

是一个语句函数,并且可以在它在范围内的任何时候进行评估,例如,C(100)返回大约37.8.

从一些代码

  xx(i) = dx*i

  f(a) = a*a

  do i = 1, nx
     x = xx(i)
     print *, f(x)
  end do
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • "但声明功能现在已经过时了",这就是我需要的,谢谢 (2认同)
  • 声明令人困惑,并在范围内引入了不必要的变量.内部功能更加普遍.一个真正有用的是现代lambda表达式和闭包,但不是这个. (2认同)