公式语言分类
目前能够作公式处理的语言和系统很多,大致上可分为如下几类:
一类是所谓符号处理语言,这类语言中没有现成的公式处理手段,但却有一套完整的基本符号处理手段。用户可以自行拼装成他们需要的工具。这类语言中最著名的是LISP1.5。
第一类是大型“公共汽车语言”,如PL/1和ALGOL68。这类语言的功能“无所不包”,当然也包括符号处理,使用这些功能即可作公式处理。
第三类是专门的公式处理语言。相对于一般程序设计语言来说它们是专用语言,但相对于公式处理来讲却是通用的。其中最著名的例子是FORMAC,它是在FORTRANⅣ语言的基础上加进公式处理功能而成的。1962年开始搞,1964年投入使用。这类语言中一般都有现成的公式处理手段。用户可直接做公式的加、减、乘、除,微分,化简、展开幂级数等。
第四类是侧重于某一领域或专用于某一领域的公式处理语言。其中大部分是以处理多项式和有理函数为主的,如SAC/1(现已发展到SAC/Z),ALPAK(后发展成ALTRAN),以及MATHLAB(交互式系统)等。这是因为多项式和有理函数是最重要的公式处理。
REDUCE2是专为理论物理工作者设计的。除了通常的公式处理功能外,它还可作自旋代数和张量等计算。
由于不定积分是一个困难的课题,因此有几个系统是专门处理积分的。目前比较著名的有SAINT和SIN,其中SAINT是解释系统,速度较慢。
最后,第五类是一项雄心勃勃的计划,要把公式处理手段和现成的数学知识结合起来,构成一个规模宏大的知识库。这方面的代表是麻省理工学院的MACSYMA系统。据几年前的报道,它已经积累了500件数学知识,共占三万机器字,整个系统运行需要六万字。它打算扩充20倍,即积存一万件数学知识,为此可能需要六十万到一百万个机器字。可以想象,没有大量的人力物力,要完成这样庞大的系统是不可能的。MACSYMA已经拥有许多用户,甚至开发过几次MACSYMA用户大会,堪称壮观。1
FORMAC语言巴黎工艺学院(Institute Universite de Technologie)计算机科学系的M.Laplace一直在致力于改进原有的FORMAC语言。FORMAC(FORmula MAnipulation Compiler)是从1964年以来搞了很久的一个语言。最初从事这一语言的人都已转走,因此这个语言的内部问题一度处于无人过问状态。这是一个功能有限的语言,只能处理多项式运算和初等函数表达式的形式微分。目前IBM计算机上用的FORMAC并不独立,而是与PL/1(或FORTRAN)达类高级语言混写的一种语言,因此每一个FORMAC语句都必须有一个标识字,如写:
LET(A=X);
来指明达是一个FORMAC语句。它也没有独立的编译程序,只是对FORMAC语句中的一些重大错误作检查,然后再靠PL/1的编译程序加工。执行时要把PL/1和FORMAC两个运行库都装配起来。因此,从存储容量和计算时间看,都要求使用大型计算机。目前经过Laplace改进的FORMAC运行库中有85个子程序,都是用汇编语言编写的。关于FORMAC语言的限制,Laplace指出以下几点:
(1)它没有形式积分的功能:看来最有效的形式积分系统应采取人机对话方式,以便尽量发挥人的主观能动性。
(2)它不区分局部和整体变量,一切FORMAC变量都是整体的,因此容易发生冲突。Laplace为FORMAC语言引入了类似于ALGOL的嵌套结构,区分了局部和整体变量。这是一项重要改进。
(3)它没有形式矩阵运算,因此只能使用矩阵元的表述式来写程序,恰如数值计算语言中大量使用循环语句完成矩阵运算那样。矩阵运算必须放弃交换律,因此FORMAC中的“简化程序” (simplificator)必须作改变。矩阵运算的最终结果应以何种形式保存,看来也应为用户提供几种可能的选择方案。
(4)多项式运算中的析因子和求最大公因子功能简不完备。
Laplace还认为,FORMAC是一种可用来作数值计算的有特色的语言,因为可以定义长达2295位(十进制)的整数。这样多的位数不是取决于机器(字长),而是取决于系统(栈的大小)。数字用表格结构存放,实际计算也要象普通硬件运算器那样,分段平行计算,采用快速进位等等。2
FORMAC命令FORMAC命令除了允许使用全部FORTRAN语句之外,增加了如下命令:
①第一类命令,这类命令用以产生FORMAC变量,如:
LET
SUBST:以表达式置换变量。
EXPAND:将括号展开。
COEFF:找到变量(或变量的幂)在所给表达式中的系数和变量的最高幂次。
PART:从FORMAC变量中取出第1个因子,原变量为取走第1个因子后的表达式:并指明原表达式是什么。
②第2类命令,这类命令用以产生FORTRAN变量,有:
EVAL:形式加SUBST,但产生FORTRAN变量,执行得数值。
MATCH:比较两个表达式等价性或恒等性产生逻辑值。3