PROLOG程式設計語言

PROLOG程式設計語言

Prolog是一種邏輯程式語言,它建立在數理邏輯學的理論基礎之上,最初用於自然語言等研究領域。

關於Prolog

Prolog(Programing in Logic)的第一個系統是1972年開發的。它是一種典型的邏輯型語言,其理論基礎是一階謂詞邏輯,重點在於對象問的邏輯描述,因而又稱描述性語言。編寫的程式是由說明程式應達到目標的邏輯說明組成的,程式設計師只需說明達到程式目標的邏輯方法,而不必說明程式執行的步驟,所以又有人把Prolog稱為面向目標的語言。Prolog程式設計不是描述計算機“如何做”,而是描述計算機要“做什麼”,至於如何做,則由Prolog語言自己完成。這說明Prolog語言在向自動求解方面邁進了一大步。Prolog的基本機制是匹配、遞歸定義、自動回溯和控制回溯。程式接近於自然語言、文法簡捷、邏輯性強、易寫易讀、便於學習使用、易於正確性證明。

日本在開展第五代計算機計畫時,曾經把Prolog語言作為核心語言使用。目前Prolog語言已廣泛套用於關係資料庫、抽象問題求解、數理邏輯、符號處理、定理證明、自然語言理解、專家系統以及人工智慧的許多領域。在國內流行的Prolog語言主要版本有:純Prolog、Prolog II、Arity Prolog、Wisdom Pmlog、Micro Prolog、PDC(Turbo,Visual) Prolog、SWI Prolog、B-Prolog、Dec一10 Prolog、MP Pmlog、PDP一11 UNIX Prolog和Quintus Prolog等。

Turbo Prolog

Turbo Prolog由美國Prolog開發中心(Pmlog Development Center,PDC)1986年開發成功,Borland公司對外發行,其1.0、2.0和2.1版本取名為Turbo Pmlog,主要為IBM PC系列及其兼容微機研製的一種編譯型Prolog系統,也可在MS—DOS環境下運行。

PROLOG程式設計語言 PROLOG程式設計語言

PDC Prolog

1990年後,PDC推出新的版本,更名為PDC Prolog 3.0和3.2。它把運行環境擴展到OS/2作業系統,並且向全世界發行。它的主要特點是:

(1)速度快,記憶體要求小。編譯及運行速度都很快,編譯時採用累積的方式,把整個原始碼編譯成機器代碼,可產生與Pascal、C語言非常的緊湊代碼,編譯中發現錯誤能自動回到編輯狀態,指出出錯位置,修改後原來已編譯好的部分基本不動,效率大為提高。

(2)用戶界面友好。集編輯、編譯、連結、調試等功能為一體,按多視窗選單和系統提示,邊上機邊學習,可方便快速地進行套用開發,能自動連線生成目標檔案,同時能對原始碼進行跟蹤調試。

(3)內部謂詞豐富獨特,提供了強有力的外部資料庫系統,用螢幕、視窗、顏色、聲音、圖形、絕對地址存取、數據連線埠等控制,編寫出圖文並茂的程式。

(4)具有強大的圖形功能。支持與Turbo C和Turbo Pascal同樣的圖形功能。

(5)集成式、模組化的程式開發環境,可將多個程式模組聯結成一個可執行的程式,能與C、Pascal、Fortran、彙編、dBASE III等語言實現自然和諧的聯結,可與DOS互動。可產生能從其他語言調用Prolog的子程式,也可從Prolog中調用其他語言產生的子程式。

(6)提供了一個用PDC Prolog編寫的Prolog解釋起原始碼。用戶可以用它研究Prolog的內部機制,並創建自己的專用程式語言、推理機、專家系統外殼或程式接口。

Visual Prolog

Visual Prolog是基於Prolog語言的可視化集成開發環境,是PDC推出的基於Windows環境的智慧型化編程工具,也是一個可以製作界面的Prolog,已經推出版本4.x、5.X、6.X和7.x。它的基本Prolog語句同DOS下的Turbo Prolog相似,曾使用過Turbo Prolog的人很容易就能上手,原DOS下的Prolog源程式也很容易移植。這個Prolog版本需要對謂詞以及數據進行聲明,就像c語言一樣。因此在使用的時候比較複雜,不過更加適合編制較大的程式。

Visual Prolog為編譯型執行,運行速度比解釋型Prolog快,源程式可編譯為獨立執行的可執行程式,也可發布為動態程式庫供VB、VC、Delphi等調用,為開發者提供更靈活的組合開發方式。

Visual Prolog具有模式匹配、遞歸、回溯、對象機制、事實資料庫和謂詞庫等強大功能。它包含構建大型應用程式所需要的一切特性:圖形開發環境、編譯器、連線器和調試器,支持模組化和面向對象程式設計,支持系統級編程、檔案操作、字元串處理、位級運算、算術與邏輯運算,以及與其他程式語言的接口。

基本語句

Prolog語言只有3種基本語句:事實、規則和問題。與命令式程式語言相比,Prolog程式中的問題相當於主程式,規則相當於子程式,而其事實相當於數據。

事實

事實用來說明問題中已知對象之間的性質和關係。

例如:likes(1ibai,book). /*喜歡(李白,書)*/

以上語句是一個名為like的關係,表示對象libai(李白)和book(書)之間有喜歡的關係。末尾“.”表示句子結束。以上語句對計算機來說沒有真正的含義,完全可以用“ai(lb,shu).”來表達這個關係,只要自己清楚ai表示愛,lb表示李白,shu表示書就可以了。

規則

規則用來描述事實之間的依賴關係,用來表示對象之間的因果關係、蘊含關係或對應關係。規則左邊表示結論,右邊表示條件。

例如:bird(X):一animal(X),has(X,feather)./*鳥(X):一動物(X),有(X,羽毛).*/

以上語句表示,凡是動物並且有羽毛,那么它就是鳥。“:一”表示“如果”(if)的意思,可用它來定義規則,它的左邊是規則的結論,右邊是規則的前提。“,”表示而且(and)的意思,用來分隔兩個句子。

問題

問題表示用戶的詢問,它是程式運行的目標,問題是程式執行的起點。問題可以寫在程式內部,但是不能與事實及規則排在一起,它需要在程式中單獨列出。問題也可以在程式運行時臨時給出,運行Prolog程式後,就可以詢問有關問題的答案了。

例如:?-student(libai). /* 李白是學生嗎?*/

特點

Prolog語言的語法結構相當簡單,但描述能力很強。例如,當事實和規則描述的是某一學科公理.那么問題就是待證的命題;當事實和規則描述的是某些數據和關係,那么問題就是數據查詢語句;當事實和規則描述的是某些狀態變化規律,那么問題就是目標狀態。因此,Prolog語言是一種智慧型型程式設計語言。

Prolog程式沒有特定的運行順序,程式運行順序完全按照數理邏輯推導(消解法)的方式進行,而不是由編程式的人決定。Prolog是一種描述型語言,用特定的方法描述一個問題,然後由計算機自動找到這個問題的答案。舉個極端的例子.當建立好事實和規則後,只需要把某個問題告訴它.它就會自動查找答案。

Prolog程式中沒有if、case、for這樣的控制流程語句。通常情況下,程式設計師不需要了解程式的運行過程,只需要注重程式的描述是否全面。不過Prolog也提供了一些控制程式流程的方法,這些方法和其他語言中的方法有很大區別。

在Prolog程式巾,程式和數據高度統一,很難分清楚哪些是程式,哪些是數據。事實上,Prolog中所有東西都有相同的形式,也就是說數據就是程式,程式就是數據。例如,用c語言編寫一個計算某個數學表達式的程式很簡單(如:a=2+54);但是如果編寫一個C程式.由用戶輸入表達式,由程式計算出表達式的值,這樣的程式編制很困難。因為用戶輸入的是一段數據(字元串),如果想讓C語言處理這個字元串,就需要多方面的技術,因為在C語言中,程式和數據是分開的。

Prolog具有智慧型資料庫功能,它的工作原理與關係資料庫基本相同,它是建立在關係資料庫的基礎上的.它與SQL資料庫查詢語言有很多相似之處。

遞歸是一種非常簡潔的方式,它能夠有效地解決許多難題。在Prolog程式語言中,遞歸功能得到了充分體現。

相關詞條

相關搜尋

熱門詞條

聯絡我們