在使用函数式编程的人看来,Fortran中所谓的纯函数并不够纯。所以我有一个问题:假设我有以下代码:
MODULE basics
IMPLICIT NONE
INTEGER, PARAMETER :: dp = kind(1.0d0)
REAL(dp), PARAMETER :: PI=3.1415926535897932_dp
REAL(dp), PARAMETER :: earthEquatorialRadius=6378.137_dp
END MODULE basics
MODULE myFunctions
USE basics
IMPLICIT NONE
PURE REAL(dp) FUNCTION sphericalArc(angleInRadians)
REAL(dp),INTENT(IN) :: angleInRadians
sphericalArc= 2.0*PI*earthEquatorialRadius*angleInRadians
END FUNCTION sphericalArc
END MODULE myFunctions
函数`SphericalArc`没有副作用,因此在这个意义上它是纯粹的,但它使用全局常量。虽然可以在函数内部定义参数PI和earthEquatorialRadius,但这是不可取的,因为我想在其他函数和子程序中使用它们。在每个函数或过程中定义dp类型将会更加繁琐。
所以从Fortran的角度来看,如果一个函数使用在函数外定义的全局参数,它仍然被认为是纯净的,并且可以从do concurrent循环中调用吗?