發展概況
PROLOG在英語中的意思就是Programming in Logic,意指用邏輯進行程式編寫或用邏輯進行程式設計。它是建立在邏輯學的理論基礎之上的,最初用於自然語言的研究領域。目前,它被廣泛地套用在人工智慧的各個研究領域中,用它可以建造專家系統、自然語言理解、智慧型知識庫等。PROLOG語言是基於邏輯演繹推理的一種邏輯型程式設計語言,它可以根據問題的有關知識進行演繹推理,通過一致化、代換、歸結、回溯等邏輯演繹,尋求適當的策略、進行問題求解。因此,PROLOG語言本身是一種邏輯推理系統。
PROLOG邏輯型程式設計語言首先由R.Kowalski提出,並由法國
馬賽大學的A.Colmarauer和他的研究小組於1972年研究成功,後來在歐洲得到進一步的發展。特別是1981年日本宣布要以PROLOG作為他們正在研製的新一代計算機——智慧型計算機的核心語言,更使得PROLOG語言舉世矚目,迅速風靡世界。現在PROLOG幾乎在人工智慧的所有領域都獲得了套用,成為與LISP並駕齊驅的甚至更加流行的智慧型程式設計語言。由於PROLOG語言是一種邏輯型程式設計語言,因此用它編寫的程式也就是邏輯程式,即在PROLOG程式中一般不需告訴計算機“怎么做”,而只需告訴它“做什麼”。因此PROLOG亦屬於陳述性語言。
PROLOG語言是以Horn子句邏輯為基礎的程式設計語言,它是目前最具代表性的一種邏輯程式設計語言。早期的PROLOG版本都是解釋型的,1986年美國的Borland公司推出了編譯型PROLOG-Turbo PROLOG,並很快成為PC機上流行的PROLOG。目前,運行在Windows環境下的可視化程式語言Visual PROLOG也已面世。但這些PROLOG語言版本屬於順序邏輯程式設計語言。為了進一步提高運行效率和推理速度,從20世紀80年代起,人們開始研製並行邏輯程式設計語言,目前已開發出了不少並行邏輯語言,其中比較著名和成熟的有PARLOG(PARallel Logical programming language)、Concurrent PROLOG、GHC(Guarded Horn Clauses)等。
由於PROLOG語言採用互動會話方式運行,文法簡潔,表達能力豐富,是一種非過程語言,已廣泛套用到關係資料庫、數理邏輯、公式處理、自然語言理解、
軟體工程、符號方程求解、定理證明、抽象問題求解、生物結構分析、專家系統以及人工智慧的其他領域等。
語句
PROLOG語言只有三種語句,分別稱為事實、規則和詢問。
(一)事實(fact)
事實(fact)是PROLOG中最簡單的謂詞(predicate)。
格式:<謂詞名>(<項表>).
其中謂詞名是以小寫英文字母打頭的字母、數字、下劃線等組成的字元串,項表示以逗號隔開的項序列。PROLOG中的項包括有常量或變數表示的簡單對象以及函式、結構和表等,即事實的形式是一個原子謂詞公式。“.”是所有PROLOG子句的結束符。
功能:一般表示對象的性質或關係。作為特殊情形,一個事實也可以只有謂詞名而無參量。
(二)規則(rule)
格式:<謂詞名>(<項表>):一<謂詞名>(<項表>){,<謂詞名>(<項表>)}.
其中符號“:-”表示“如果”(if),或者可以理解為一種“蘊涵”“一”;“,”表示邏輯“與”(and)。其左部的謂詞是規則的結論(亦稱為頭),右部的謂詞是規則的前提(亦稱為體),“{}”表示零次或多次重複。
功能:一般表示對象間的因果關係、蘊涵關係或對應關係。
(三)詢問(question)
格式:?-<謂詞名>(<項表>){,<謂詞名>(<項表>)).
功能:表示用戶對問題的詢問,它就是程式運行的目標。詢問可以與規則和事實同時一起給出,也可以在程式運行時臨時給出。
特點
PROLOG語言的特點主要表現在以下幾個方面:
(1)PROLOG 語言是一種描述型語言:用PROLOG語言進行程式設計時,只需要設計人員描述待解問題中的對象以及它們之間關係的已知事實和變換規則。從某種意義上講,也就是要告訴計算機“做什麼”,而不是“如何做”。而高級語言,如
FORTRAN、
PASCAL、
BASIC等語言,還要描述、解決如何做這個問題。
(2)PROLOG的數據和程式具有統一的結構形式:PROLOG提供了一種統一的符號結構,稱為“項”。所有數據和程式都是由“項”作為基本單位,並且都是樹型結構,語句既可表示數據,又可表示程式。在人工智慧程式中,常需將一段程式的輸出數據作為新產生的程式來執行,因此人工智慧語言應具有數據和程式結構統一的特性。
(3)PROLOG能自動實現
模式匹配和回溯:模式匹配和回溯是
人工智慧系統中常用的基本操作,PROLOG語言提供了自動完成這些操作的功能。
(5)強大的遞歸功能:
遞歸是PROLOG和
LISP語言的重要特點,這一特點使得一個
大數據結構能夠用一個小的程式來處理。
(6)程式易於編寫和閱讀:由於PROLOG語言基於謂詞邏輯,面向人的自然語言,同時,PROLOG語言的句型少,語法規則也比較簡單,因此程式易於編寫和閱讀。
常用版本
Prolog語言發展迅速,目前Prolog已有許多版本,它們都有其特點:
這是一個可以製作界面的Prolog。用這種Prolog 版本進行編程時需要對謂詞以及數據進行聲明,就像用C語言一樣,因此在使用的時候比較複雜。適合編制較大的程式。編譯出來的程式可以直接運行。
(2)AMZI Prolog
這種Prolog版本包含解釋器、編譯器。編譯後的程式不能夠直接運行,需要運行器運行。用它編寫的Prolog程式可以很方便地和其它程式語言(例如visual basic,java,C/C++,CGI)的程式連線。它的語法及內部謂詞符合規範,而與Visual Prolog稍有不同。
(3)SWI Prolog
它的語法和AMZI Prolog相同,但內部謂詞有些不同,程式稍加修改可以通用。如果下載圖形軟體包XPCE,可以開發有界面的程式。
(4)Turbo Prolog
它是一種Dos版本的Prolog,可以編譯成執行檔。語法和Visual Prolog相同,但內部謂詞有許多不同。
(5)B Prolog
是國內開發的Prolog編譯器,據測評比其它的Prolog編譯器運算速度都要快。有Linux及Windows兩個版本,但集成開發環境缺乏必要的調試功能。語法和內部謂詞與其它編譯器都不太相同。此Prolog提供了許多測試速度的解謎題的程式。