Prolog概況及基本結構分析
Prolog是當代最有影響的人工智能語言之一,由于該語言很適合表達人的思維和推理規則,在自然語言理解、機器定理證明、專家系統等方面得到了廣泛的應用,已經成為人工智能應用領域的強有力的開發語言。
盡管Prolog語言有許多版本,但它們的核心部分都是一樣的。Prolog的基本語句僅有三種,即事實、規則和目標三種類型的語句,且都用謂詞表示,因而程序邏輯性強,文法簡捷,清晰易懂。另一方面,Prolog是陳述性語言,一旦給它提交必要的事實和規則之后,Prolog就使用內部的演繹推理機制自動求解程序給定的目標,而不需要在程序中列出詳細的求解步驟。
1、事實
事實用來說明一個問題中已知的對象和它們之間的關系。在Prolog程序中,事實由謂詞名及用括號括起來的一個或幾個對象組成。謂詞和對象可由用戶自己定義。
例如,謂詞likes(bill,book)。
是一個名為like的關系,表示對象bill和book之間有喜歡的關系。
2、規則
規則由幾個互相有依賴性的簡單句(謂詞)組成,用來描述事實之間的依賴關系。從形式上看,規則由左邊表示結論的后件謂詞和右邊表示條件的前提謂詞組成。
例如,規則 bird(X):-animal(X),has(X,feather)。
表示凡是動物并且有羽毛,那么它就是鳥。
3、目標(問題)
把事實和規則寫進Prolog程序中后,就可以向Prolog詢問有關問題的答案,詢問的問題就是程序運行的目標。目標的結構與事實或規則相同,可以是一個簡單的謂詞,也可以是多個謂詞的組合。目標分內、外兩種,內部目標寫在程序中,外部目標在程序運行時由用戶手工鍵入。
例如問題 ?-student(john)。
表示“john是學生嗎?”
Prolog程序的簡單例子
以下兩個例子在Turbo Prolog 2.0環境下運行通過。
[ 注:一個Turbo Prolog程序至少包括謂詞段、子句段和目標段三項。目標可以包含在程序中,也可以在程序運行時給出。]
例1 誰是john的朋友?
predicates /*謂詞段,對要用的謂詞名和參數進行說明*/
likes(symbol, symbol)
friend(symbol, symbol)
clauses /*子句段,存放所有的事實和規則*/
likes(bell,sports)。 /*前4行是事實*/
likes(mary,music)。
likes(mary,sports)。
likes(jane,smith)。
friend(john,X):-likes(X,sports),likes(X,music)。 /*本行是規則*/
當上述事實與規則輸入計算機后,運行該程序,用戶就可以進行詢問,如輸入目標:
friend(john,X)
即詢問john的朋友是誰,,這時計算機的運行結果為:
X=mary (mary是john的朋友)
1 Solution (得到了一個結果)
程序運行界面如下圖所示:
例2 漢諾塔問題:
有N個有孔的盤子,最初這些盤子都疊放在柱a上(如圖1),要求將這N個盤子借助柱b從柱a移到柱c(如圖2),移動時有以下限制:每次只能移動一個盤子;大盤不能放在小盤上。問如何移動?
該問題可以采用遞歸法思想來求解,其源程序為:
predicates /*謂詞段*/
hanoi(integer)
move(integer,symbol,symbol,symbol)
inform(symbol,symbol)。
clauses /*子句段*/
hanoi(N):-move(N,a,b,c)。
move(1,A,_,C):-inform(A,C),!。
move(N,A,B,C):-N1=N-1,move(N1,A,C,B),
inform(A,C),move(N1,B,A,C)。
inform(Loc1,Loc2):-nl,write(“移動1個盤子從柱” ,Loc1,“到柱”,Loc2)。
goal /*目標段,問移動3個盤子的方法*/
hanoi(3)
這個例子的目標包含在程序里面,因此運行時程序將直接輸出所有結果。
如何使用Prolog?
一般而言,prolog作為數據或者邏輯處理程序而運行,配合其它程序如VC++、JAVA等的界面,由此實現帶UI交互的“智能”軟件,當然你所編輯出來的“智能”是軟件,而不能說是真正意義的人工智能。上文說Prolog就是一個智能數據庫,其實不然,Prolog主要是對數據進行一種關系描述,比如張三和李四是A關系,李四和王二是B關系,A關系==B關系,那么Prolog則擅長處理這種邏輯上的數據關系,不能和SQL混為一談,所以說,Prolog的用途是來處理數據之間關系的,而不是存儲數據本質的存在。
Prolog語言的常用版本
Prolog語言最早是由法國馬賽大學的Colmerauer和他的研究小組于1972年研制成功。早期的Prolog版本都是解釋型的,自1986年美國Borland公司推出編譯型Prolog,即Turbo Prolog以后,Prolog便很快在PC機上流行起來。后來又經歷了PDC PROLOG、Visual Prolog不同版本的發展。并行的邏輯語言也于80年代初開始研制,其中比較著名的有PARLOG、Concurrent PROLOG等。
1、Turbo Prolog
由美國Prolog開發中心(Prolog Development Center, PDC)1986年開發成功、Borland公司對外發行,其1.0,2.0,2.1版本取名為Turbo Prolog,主要在IBM PC系列計算機,MS-DOS環境下運行。
2、PDC Prolog
1990年后,PDC推出新的版本,更名為PDC Prolog 3.0,3.2,它把運行環境擴展到OS/2操作系統,并且向全世界發行。它的主要特點是:
?速度快。編譯及運行速度都很快,產生的代碼非常緊湊。
?用戶界面友好。提供了圖形化的集成開發環境。
?提供了強有力的外部數據庫系統。
?提供了一個用PDC Prolog編寫的Prolog解釋起源代碼。用戶可以用它研究Prolog的內部機制,并創建自己的專用編程語言、推理機、專家系統外殼或程序接口。
?提供了與其他語言(如C、Pascal、Fortran等)的接口。Prolog和其他語言可以相互調用對方的子程序。
?具有強大的圖形功能。支持Turbo C、Turbo Pascal同樣的功能。
3、Visual Prolog
Visual Prolog是基于Prolog語言的可視化集成開發環境,是PDC推出的基于Windows環境的智能化編程工具。目前,Visual Prolog在美國、西歐、日本、加拿大、澳大利亞等國家和地區十分流行,是國際上研究和開發智能化應用的主流工具之一。
Visual Prolog具有模式匹配、遞歸、回溯、對象機制、事實數據庫和謂詞庫等強大功能。它包含構建大型應用程序所需要的一切特性:圖形開發環境、編譯器、連接器和調試器,支持模塊化和面向對象程序設計,支持系統級編程、文件操作、字符串處理、位級運算、算術與邏輯運算,以及與其它編程語言的接口。
Visual Prolog包含一個全部使用Visual Prolog語言寫成的有效的開發環境,包含對話框、菜單、工具欄等編輯功能。
Visual Prolog與SQL數據庫系統、C++開發系統、以及Visual Basic、Delphi或Visual Age等編程語言一樣,也可以用來輕松地開發各種應用。
Visual Prolog軟件的下載地址為:http://www.visual-prolog.com
Prolog語言特點
1. prolog程序沒有特定的運行順序,其運行順序是由電腦決定的,而不是編程序的人。從這個意義上來說,prolog程序不是真正意義上的程序。所謂程序就是按照一定的步驟運行的計算機指令,而prolog程序的運行步驟不由人來決定。它更像一種描述型的語言,用特定的方法描述一個問題,然后由電腦自動找到這個問題的答案。舉個極端的例子,你只需要把某個數學題目告訴它,它就會自動的找到答案,而不像使用其他的語言一樣,必須人工的編制出某種算法。
2. prolog程序中沒有if、when、case、for這樣的控制流程語句前面已經說了,程序的運行方式有電腦自己決定,當然就用不到這些控制流程的語句了。通常情況下,程序員不需要了解程序的運行過程,只需要注重程序的描述是否全面,不過prolog也提供了一些控制流程的方法,這些方法和其他語言中的方法有很大的區別,希望你在以后的學習當中能夠融會貫通。
3. prolog程序和數據高度統一在prolog程序中,是很難分清楚哪些是程序,哪些是數據的。事實上,prolog中的所有東西都有相同的形式,也就是說數據就是程序,程序就是數據。舉一個其他語言的例子:如果想用c語言編寫一個計算某個數學表達式的程序很簡單(比如:a=2+5*4),因為這是一段程序。但是如果想編寫一個計算用戶輸入的表達式的值的程序就很困難了。因為用戶輸入的是一段數據(字符串),如果想讓c語言處理這個字符串,就需要很多方面的技術。則正是因為在c語言中,程序和數據是分開的。而在prolog就不存在這個問題,你甚至可以很輕松的編寫處理其它prolog程序的程序。
4. prolog程序實際上是一個智能數據庫prolog的原理就是關系數據庫,它是建立在關系數據庫的基礎上的。在以后的學習中你會發現它和SQL數據庫查詢語言有很多相似之處。使用prolog可以很方便的處理數據。5. 強大的遞歸功能在其它的語言中,你也許已經接觸過遞歸程序了。遞歸是一種非常簡潔的方式,它能夠有效的解決許多難題。而在prolog中,遞歸的功能得到了充分的體現,你甚至都會感到驚奇,遞歸居然有如此巨大的能力。
評論
查看更多