假设我在 Julia 中使用/导入一个模块:
using someModule
Run Code Online (Sandbox Code Playgroud)
我没有编写模块,我想知道该模块的导出行中有哪些函数、变量、类型等。我是怎么做到的?(我使用的是 Julia 1.3.1)
考虑以下子程序
subroutine myProc(m,n,flag,X)
Integer, intent(in) :: m,n
logical, intent(in) :: flag
real(8), intent(out), allocatable :: X(:,:)
if (flag) then
allocate(X(m,n))
! some more code here
else
allocate(X(m-1,n))
! some more code here
end if
end subroutine myProc
!!!!!!!!!!!!!!!!!!!
Run Code Online (Sandbox Code Playgroud)
另外,如何在程序中调用此过程?假设我写
!... some code before
call myProc(5,6,.TRUE.,X)
Run Code Online (Sandbox Code Playgroud)
我是否需要将 X 定义为 (4,6) 实数数组或将可分配数组传递给子例程?
在 Fortran 95 中甚至可以做到所有这些吗?
在我看来,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
Run Code Online (Sandbox Code Playgroud)
函数sphericalArc没有副作用,所以它在这个意义上是纯粹的,但它使用全局常量.确实可以在函数内部定义参数PI和earthEquatorialRadius,但这是不可取的,因为我想在其他函数和子例程中使用它们.在每个函数或过程中定义dp类型会更加繁琐.
因此,从Fortran的角度来看,一个函数使用在函数之外定义的全局参数仍然被认为是纯粹的并且可以从do并发循环中调用吗?