编写步骤
在编写非过程语言程序时一般要遵守下列步骤:
1.执行内务处理,例如清存储器、预置计数器初值等;
2.打开文卷,检查标号;
3.读输入记录;
4.执行算术或逻辑运算;
5.产生输出记录;
6.重复步骤3—5,直到处理完全部记录;
7.打印最终的输出记录,关闭文卷;
8.结束程序或将控制返回操作系统.1
概念解释非过程这一术语是相对的,它随技术水平的变化而变化。无论如何,较少过程的这一用语较佳,因为它明确了这一概念的相对性。考察图1将使这个问题更清楚。比较图1 (a)和1(a*),表明了汇编语言与类Fortran语言之间的差别。在Fortran存在之前,表达式A=(B+C) *D+E*F可认为是非过程的,因为它不能被任何语言加工程序所直接翻译。同样,图1(b)与1(b*)示出另一级的相对性,因为进行矩阵相乘的Fortran程序在APL中可用一个语句来处置。在Fortran中采用子例程序并不给出附加的非过程性,因为过程性乃基于语言的基元。最后,图1(c*)示出一个程序,它计算素数3到95的平方根并按两列打印(CALCULATE THE SQUARE ROOT OF THE PRIME NUMBERS FROM 3 TO 95 AND PRINT IN TWO COLUMNS),它不能被任何至今已知的翻译系统所处置,但是如果它能的话,按1980标准,该语言可认为是非过程的。[必须认识,图1(c*)中示出的两种形式在逻辑上是等效的,对其中一种形式比另一种 (即形式表示比英语表示)更喜欢,那只是个人爱好的问题。]一个系统“理解”英语的能力不在这里争论;看起来象英语的短语实际上取决于特定的程序设计技术(例如模式匹配与宏扩展),而不是英语的文法。用另一方式陈述这一观点(由于其在这事情至为重要),完全可能设计一个形式语言来做数学问题,其中可接受CALCULATE THE SQUARE ROOT OF THE PRIME NUMBERS FROM 3 TO 95 AND PRINT IN TWO COLUMNS这一语句。在另一极端,象FIND x SUCH THAT X**2=5(求x使x2=5) 这样的看起来自然又优雅的短语实际上等效于调用一个平方根例行程序。因此,非过程性与英语表示法是完全无关的两个方面。
图1
(a) (a*)
(assembly Language) (Fortran)
CLA B A=(B+C)*D+E*F
ADD C MPY D STO T CLA E MPY F ADD T STO A
(b) (b*)
(Fortran) (APL)
DO 71=1,M A←B+.×C DO 8J=1,N C(1,J)=0
DO 9K=1,L C(1,J)=C(1,J)+A(1,K)*B(K,J)
9 CONTINUE
8 CONTINUE
7 CONTINUE
(c)
(PL/1) (c*)
DO 1=3 TO 95 BY 2; PRINT(2)
IF PRIME(1) SQ(PRIME(3,95))
THEN PUT SKIP LIST
(1,SQRT(1)); 或
ELSE RETURN;
END; CALCULATE THE SQUARE
ROOT OF THE PRIME
NUMBERS FROM 3 TO
95 AND PRINT IN
2 COLUMNS
历史发展在很早期的程序设计 (即50年代的前5年)中,自动程序设计这个词用来表示用某一高级语言来编写一个程序的过程。其中“高级”是与机器代码相比较。随着时间推移,显然编码只是整个解题任务的一部分,所以用自动编码这个词来表示采用诸如Fortran这样的语言。因此,甚至在很早期,在编码(它是整个程序设计任务中的一个方面)和说明与设计这一大量活动之间作出了适当的区别。第一批重要的成就之一是在Information Algebra的开发中Codasyl Languange Structure Group的工作。这实质上是利用输入/输出关系来描述数据处理应用的一种面向数学的方法;这些输入/输出关系实际上是利用对称为区域(类似于文件)的实体集合的变换来定义的。作为另一个例子,我们注意到,象 Comit与Snobol这样的面向字符串与模式的语言对于那些特征的过程性比Fortran与Cobol这样的语言少得多。
Lisp 语言最早是在 20 世纪 50 年代末由麻省理工学院(MIT)为研究人工智能而开发的。Lisp 语言的强大使它在其它方面诸如编写编辑命令和集成环境等显示其优势。而 GNU Emacs Lisp 主要由 Maclisp 发展而来。它在某种程度上继承了 Common Lisp,而 Common Lisp 在 20 世纪 80 年代成了一种标准。 Lisp 代表 LISt Processing,即表处理,这种编程语言用来处理由括号(即“(”和“)”)构成的列表。2
特征相联引用我们将使用相联引用这个术语来指基于数据的本征性质的数据存取。相联引用通常在那些把集合作为数据结构的语言中提供。从原先定义的集合中选择元素和基于成员的某一特性从老的集合中定义新的集合,这样的操作有时称为集合形成(例如,见SETL——q. v.)。SETL的功能的一个例子可由下列表达式看到,它说明在2与100之间的素数。
{P,2