公式處理語言

公式處理語言

巴黎工藝學院(Institute Universite de Technologie)計算機科學系的M.Laplace一直在致力於改進原有的FORMAC語言。FORMAC(FORmula MAnipulation Compiler)是從1964年以來搞了很久的一個語言。最初從事這一語言的人都已轉走,因此這個語言的內部問題一度處於無人過問狀態。這是一個功能有限的語言,只能處理多項式運算和初等函式表達式的形式微分。

公式語言分類

目前能夠作公式處理的語言和系統很多,大致上可分為如下幾類:

一類是所謂符號處理語言,這類語言中沒有現成的公式處理手段,但卻有一套完整的基本符號處理手段。用戶可以自行拼裝成他們需要的工具。這類語言中最著名的是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用戶大會,堪稱壯觀。

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位(十進制)的整數。這樣多的位數不是取決於機器(字長),而是取決於系統(棧的大小)。數字用表格結構存放,實際計算也要象普通硬體運算器那樣,分段平行計算,採用快速進位等等。

FORMAC命令

FORMAC命令除了允許使用全部FORTRAN語句之外,增加了如下命令:

①第一類命令,這類命令用以產生FORMAC變數,如:

LET

SUBST:以表達式置換變數。

EXPAND:將括弧展開。

COEFF:找到變數(或變數的冪)在所給表達式中的係數和變數的最高冪次。

PART:從FORMAC變數中取出第1個因子,原變數為取走第1個因子後的表達式:並指明原表達式是什麼。

②第2類命令,這類命令用以產生FORTRAN變數,有:

EVAL:形式加SUBST,但產生FORTRAN變數,執行得數值。

MATCH:比較兩個表達式等價性或恆等性產生邏輯值。

相關詞條

熱門詞條

聯絡我們