附录B Fortran 95内在过程
FORTRAN 95标准提供了115个内在过程,其中包括109个内在函数和6个内在子例行子程序。
很多编译系统还提供额外的内在过程。
按照形式,内在过程分为如下两类:通用过程;专用过程。
所谓通用过程是一个集合名称,通用过程与专用过程是一个集合与其元素的关系。
一个通用过程由两个或多个专用过程组成。
在所有的115个内在过程当中,除了如下4个内在函数外,其他都是通用过程:LGE、LGT、LLE和LLT。
专用过程针对具体类型与种别的变量。
例如,求一个变量的绝对值的通用过程为ABS(X),而求一个整型变量的绝对值的专用过程为IABS(X),求一个复型变量的绝对值的专用过程为CABS(X),如此等等。
所以,每个通用过程属下的专用过程都必定具有相应的类型,种别,甚至维的属性。
这些专用过程的名称的主要用途是作为实元来传递,这时就必须使用专用过程名称。
注意,在表中注明了少数专用过程不能作为实元。
按照功能,FORTRAN 95的内在过程主要分为如下5类:查询与数字操作函数;转换,置空以及传递函数;计算函数;数组函数;内在子例行程序。
如果从功能的角度来对内在过程分类,那么除了上面的比较具体的5类之外,还可以从内在过程对数组的作用方式的角度,把内在过程分为两大类:逐元过程和变换过程。
所谓逐元过程,就是从数学的观点来看,这些专用过程的计算对象并不是数组,但是可以运用一种自然的方式使得这专用过程能够作用于数组对象,并且得到相同形状的数组结果。
也就是使得该过程分别作用于数组的每个元素,把所有的过程结果再集合起来作为结果数组。
内在过程当中的大部分都属于逐元过程,包括:转换函数;计算函数(除了REPEA T,TRIM,DOT_PRODUCT,MA TMUL之外);子例行程序MVBITS。
其他的所有内在过程就都不是逐元过程了。
所谓变换过程,就是内在过程里面逐元过程之外的所有过程都称为变换过程,因为从它们的定义的实质上看,就是作用于一个数组数据对象,得到一个标量或者数组结果,也就是一个变换的过程,而不是单独地作用于每个元素。
因此除了函数NULL之外,所有的变换过程或者是具有一个取数组值的哑元,或者是具有一个取数组值的实元,它们对数组的作用都是某种整体变换作用。
例如对于向量的乘积,就不能逐个元素地进行。
内在过程的引用正如一般过程的引用一样,可以使用关键词变量。
由于某些内在过程的变量是可选项,因此使用关键词能够省略相应的实元。
常见的关键词哑元名称含义如下:
● DIM:DIM主要用于数组简化函数以及其他一些数组函数,表示在函数的作用对象不是整个数组的情况下,数组的哪个维被过程作用。
DIM取值为标量整型值,并且常常是可选变量。
●KIND:KIND一般用于转换函数,说明转换结果的种别参数。
KIND实元必须是一个标量整型初始化表达式,一般是可选的。
●BACK:BACK作为一个可选的逻辑型变量用来表示逆序过程,即它所出现的内在过程的对于数据对象的反方向操作。
例如,如果在内在过程INDEX当中出现了BACK=.TRUE.,那么INDEX的搜索操作就必须与正常方向相反,即从字符串的右端开始。
注意内在函数的非指针哑元都具有INTENT(IN)的属性,而指针哑元则不能改变其关联的实元或目标。
注1:该函数没有相应的通用过程名称,它的结果为默认整型。
注2:该函数没有相应的通用过程名称,它的结果为默认实型。
注3:标注星号*的函数不能用作实元。
注4:某些专用过程名称与其通用过程名称一样。
注:表B2中哑元名表示其类型:I 整型; R 实型; C 复型; S 字符型; L 逻辑型; X 多种类型; CH 单字符;
A 数组;M 矩阵; P 指针; V 向量; LA 逻辑型数组; IA 整型数组。