Мне кажется, что то, что называется чистой функцией в Фортране, не считается достаточно чистым для тех, кто использует функциональное программирование.Вот мой вопрос.Предположим, у меня есть следующий код:
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, это функция, которая использует глобальные параметры, определенные вне функции, все еще считающейся чистой, и может вызываться изсделать параллельный цикл?