巴塞羅那博覽會德國館

[拼音]:luoji chengxu sheji

[英文]:logic programming

將邏輯直接作為程式設計語言並將計算作為受控推理的一種程式設計技術。1972年法國科莫勞埃小組實現了第一個邏輯程式設計語言PROLOG。1974年以後R.科瓦爾斯基進一步闡明瞭PROLOG的理論基礎,並系統地發展了邏輯程式設計的思想。對於傳統的程式設計來說,演算法的邏輯意義往往被程式複雜的控制成分所掩蓋,使程式的正確性難以得到證明。而且通常的高階程式設計語言屬於過程性語言,需要在程式執行前詳細規定執行步驟。科瓦爾斯基對傳統的演算法或對用通常高階語言編寫的程式提出了一個著名的分析公式,即演算法=邏輯+控制。其基本思想是要從根本上改變程式設計的方法:使用者只需要編寫程式的邏輯部分(邏輯程式設計之名由此而來),而系統中的解釋程式則實施控制部分的職能。這種將邏輯與控制分開的方法具有下列的優點:

(1)可以在控制部分設計之前不斷改進邏輯程式。

(2)可以改進控制部分而無需變動邏輯程式本身。

(3)可以從程式說明中生成邏輯程式,加以驗證和變換,而無需考慮其控制部分。

(4)只需在邏輯程式中規定目標和實現這些目標的現有條件,也就是隻需告訴系統做什麼(What to do),至於如何執行也就是說怎樣做 (How to do),則由系統的控制部分,即解釋程式處理解決。

現行邏輯程式的基本語句屬於一階謂詞演算的一個子集,HORN子句集。HORN子句的一般形式為:A1,…,Am←B1,B2,…,Bn,其中Ai(1≤i≤m)、Bj(1≤j≤n)都是原子公式,分別代表結論和前提的形式。前提部分是各原子的合取式,構成子句體,結論部分最多隻有一個原子,稱為子句頭。由此可將HORN子句分成兩個基本型別:

(1)有頭HORN子句(用來代表一條規則),例如,grandfather(x,z)←father(x,y),father (y,z)代表:x是y的父親且y是z的父親,則x是z的祖父。有頭無體的HORN子句是一斷言(用來代表一個事實)。例如,father(A,B)代表:A是B的父親,father(B,C)代表:B是C的父親。

(2)無頭HORN子句,稱為目標語句(用來代表結論的否定式),例如,←grandfather(A,C)代表:A不是C的祖父。邏輯學家A.霍恩對這類子句性質作了詳盡的研究,HORN子句即因此得名。

從問題歸約的角度看,可將HORN子句解釋為一過程,它將問題(目標)A歸約為若干子問題(子目標),每一子問題 Bi(1≤i≤n)又可解釋為對其他過程(HORN子句)的呼叫。有頭無尾的HORN子句則代表一個已知其解的基元問題。過程呼叫實際上是使構成子句體的一個原子(子目標)與某一子句頭匹配,這就是運用歸結原理中的合一的過程。因此邏輯程式的執行過程也就可以看成是定理證明過程,其中解釋程式起定理證明器或問題求解器的作用。

HORN子句的過程呼叫(B1, B2,…,Bn)可按任意次序進行,適合於平行處理。HORN子句可作過程性的解釋也可作陳述性的解釋,運用比較方便。因此,以HORN子句為基礎的邏輯程式設計語言PROLOG受到人們的重視(見PROLOG語言)。日本的第五代計算機系統的計劃也推動了邏輯程式設計的研究。也有人認為,不同型別的問題需要不同風格的程式設計方法,在下一代的知識資訊處理系統中除邏輯程式設計之外,還必須重視面向物件的程式設計、面向存取的程式設計、規則型程式設計,此外,建立與知識資訊處理相適應的程式設計環境也是重要的課題。

參考書目

K.L.Clark and S.- A. Tarnlund,eds,Logic Programming,Academic Press,Inc.,London,1982.