摘要:Prolog是人工智能語(yǔ)言的一個(gè)典型代表。本文簡(jiǎn)要闡述了人工智能語(yǔ)言及其特點(diǎn),并通過(guò)實(shí)例介紹了Prolog語(yǔ)言及其基本結(jié)構(gòu)。
關(guān)鍵詞:人工智能語(yǔ)言;Prolog;遞歸
中圖分類(lèi)號(hào):TP312文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)05-10ppp-0c
Prolog的思想最早由R. Kowalski提出,1972年,第一個(gè)prolog語(yǔ)言在法國(guó)的馬賽研制成功,最初設(shè)計(jì)思想是以FOL為背景,設(shè)計(jì)一個(gè)處理邏輯推理問(wèn)題的會(huì)話(huà)式語(yǔ)言。Prolog 目前是AI應(yīng)用中重要的開(kāi)發(fā)工具,也是開(kāi)發(fā)知識(shí)庫(kù)、ES、自然語(yǔ)言接口、智能信息管理系統(tǒng)的重要工具。
1 什么是人工智能語(yǔ)言
人工智能(AI)語(yǔ)言是一類(lèi)適應(yīng)于人工智能和知識(shí)工程領(lǐng)域的、具有符號(hào)處理和邏輯推理能力的計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。能夠用它來(lái)編寫(xiě)程序求解非數(shù)值計(jì)算、知識(shí)處理、推理、規(guī)劃、決策等具有智能的各種復(fù)雜問(wèn)題。典型的人工智能語(yǔ)言主要有LISP、Prolog、Smalltalk、C++等。
一般來(lái)說(shuō),人工智能語(yǔ)言應(yīng)具備如下特點(diǎn):
(1)具有符號(hào)處理能力;
(2)適合于結(jié)構(gòu)化程序設(shè)計(jì),編程容易;
(3)具有遞歸功能和回溯功能;
(4)具有人機(jī)交互能力;
(5)適合于推理。
人們可能會(huì)問(wèn),用人工智能語(yǔ)言解決問(wèn)題與傳統(tǒng)的方法有什么區(qū)別呢?
傳統(tǒng)方法通常把問(wèn)題的全部知識(shí)以各種的模型表達(dá)在固定程序中,問(wèn)題的求解完全在程序制導(dǎo)下按著預(yù)先安排好的步驟一步一步(逐條)執(zhí)行。解決問(wèn)題的思路與馮.諾依曼式計(jì)算機(jī)結(jié)構(gòu)相吻合。當(dāng)前大型數(shù)據(jù)庫(kù)法、數(shù)學(xué)模型法、統(tǒng)計(jì)方法等都是嚴(yán)格結(jié)構(gòu)化的方法。
對(duì)于人工智能技術(shù)要解決的問(wèn)題,通常需要建立一個(gè)知識(shí)庫(kù),程序根據(jù)環(huán)境和所給的輸入信息以及所要解決的問(wèn)題來(lái)決定自己的行動(dòng),所以它是在環(huán)境模式的制導(dǎo)下的推理過(guò)程。這種方法有極大的靈活性、對(duì)話(huà)能力、有自我解釋能力和學(xué)習(xí)能力。這種方法對(duì)解決一些條件和目標(biāo)不大明確或不完備,的非結(jié)構(gòu)化問(wèn)題比傳統(tǒng)方法好。它采用用試探法來(lái)解決問(wèn)題。人工智能也尚未發(fā)展到完全能解決這類(lèi)問(wèn)題的全部問(wèn)題。這類(lèi)問(wèn)題是人工智能研究要解決的問(wèn)題。
2 Prolog語(yǔ)言及其基本結(jié)構(gòu)
Prolog是當(dāng)代最有影響的人工智能語(yǔ)言之一,由于該語(yǔ)言很適合表達(dá)人的思維和推理規(guī)則,在自然語(yǔ)言理解、機(jī)器定理證明、專(zhuān)家系統(tǒng)等方面得到了廣泛的應(yīng)用,已經(jīng)成為人工智能應(yīng)用領(lǐng)域的強(qiáng)有力的開(kāi)發(fā)語(yǔ)言。現(xiàn)在的Prolog語(yǔ)言有許多版本,但它們的核心部分都是一樣的。Prolog的基本語(yǔ)句僅有三種,即事實(shí)、規(guī)則和目標(biāo)三種類(lèi)型的語(yǔ)句,且都用謂詞表示,因而程序邏輯性強(qiáng),文法簡(jiǎn)捷,清晰易懂。另一方面,Prolog是陳述性語(yǔ)言,一旦給它提交必要的事實(shí)和規(guī)則之后,Prolog就使用內(nèi)部的演繹推理機(jī)制自動(dòng)求解程序給定的目標(biāo),而不需要在程序中列出詳細(xì)的求解步驟。
2.1 事實(shí)
事實(shí)用來(lái)說(shuō)明一個(gè)問(wèn)題中已知的對(duì)象和它們之間的關(guān)系。在Prolog程序中,事實(shí)由謂詞名及用括號(hào)括起來(lái)的一個(gè)或幾個(gè)對(duì)象組成。謂詞和對(duì)象可由用戶(hù)自己定義。
例如,Bill likes Cindy.Cindy likes Bill.Bill likes dogs.
Prolog表示為:likes(bill, cindy). likes(cindy, bill).likes(bill, dogs).
2.2 規(guī)則
規(guī)則由幾個(gè)互相有依賴(lài)性的簡(jiǎn)單句(謂詞)組成,用來(lái)描述事實(shí)之間的依賴(lài)關(guān)系。從形式上看,規(guī)則由左邊表示結(jié)論的后件謂詞和右邊表示條件的前提謂詞組成。
例如,Cindy likes everything that Bill likes.
Caitlin likes everything that is green.
Prolog表示為: likes(cindy, Something):-likes(bill, Something).
likes(caitlin, Something):-green(Something).
2.3 目標(biāo)(問(wèn)題)
把事實(shí)和規(guī)則寫(xiě)進(jìn)Prolog程序中后,就可以向Prolog詢(xún)問(wèn)有關(guān)問(wèn)題的答案,詢(xún)問(wèn)的問(wèn)題就是程序運(yùn)行的目標(biāo)。目標(biāo)的結(jié)構(gòu)與事實(shí)或規(guī)則相同,可以是一個(gè)簡(jiǎn)單的謂詞,也可以是多個(gè)謂詞的組合。
例如問(wèn)題 ?-student(john).表示“john是學(xué)生嗎?”
3 Prolog的基本語(yǔ)句
3.1 Prolog程序由一組事實(shí)和規(guī)則組成,如:
likes(george, swimming).
likes(susie, swimming) :- likes(george, swimming).
likes(mary, X) :- likes(susie, X), likes(george, X).
上述程序執(zhí)行過(guò)程可以如下:
?- likes(george, swimming).
Yes
?- likes(jack, biking).
No
?- dislikes(jack, biking).
No
3.2 遞歸性
member: 確定某元素是否是某個(gè)表中的成員
member(X, [X |_]).
member(X,[_|Y]):- member(X,Y).
append: 把兩個(gè)表連成一個(gè)表
append([],L,L).
append([X|L1],L2,[X|L3]):- append(L1,L2,L3).
3.3 prolog程序
求誰(shuí)是john的朋友?
predicates /*謂詞段,對(duì)要用的謂詞名和參數(shù)進(jìn)行說(shuō)明*/
likes(symbol, symbol)
friend(symbol, symbol)
clauses /*子句段,存放所有的事實(shí)和規(guī)則*/
likes(bell,sports). /*前4行是事實(shí)*/
likes(mary,music).
likes(mary,sports).
likes(jane,smith).
friend(john,X):-likes(X,sports),likes(X,music). /*本行是規(guī)則*/
當(dāng)上述事實(shí)與規(guī)則輸入計(jì)算機(jī)后,運(yùn)行該程序,用戶(hù)就可以進(jìn)行詢(xún)問(wèn),如輸入目標(biāo):
friend(john,X)
即詢(xún)問(wèn)john的朋友是誰(shuí),這時(shí)計(jì)算機(jī)的運(yùn)行結(jié)果為:
X=mary (mary是john的朋友)
3.4 附加的控制機(jī)制cut
cut用“!”表示:恒真,cut是一種能夠影響Prolog回溯方式的專(zhuān)門(mén)機(jī)構(gòu):當(dāng)要回溯前面一串已滿(mǎn)足目標(biāo)時(shí),就不要考慮那些目標(biāo)的其他可選分支了。或著說(shuō):!在SLD樹(shù)上剪除了以它的父目標(biāo)為根的那個(gè)子樹(shù)中尚未被搜索的部分。
優(yōu)點(diǎn):程序可以運(yùn)行的更快,程序可以占用較少的內(nèi)存空間。
cut的幾種用法:放在產(chǎn)生器和測(cè)試器的后面,example(X):-generate(X),test(X),!,與內(nèi)部謂詞fail合用。
例如:如果一個(gè)人是健壯的,條件為:沒(méi)有心臟病、肺病,不是近視眼。
strong(X):- heart_disease(X),fail.
strong(X):- tuberculosis(X),fail.
strong(X):- nearsight(X),fail.
strong(X).
heart_disease(xiao_li).
?- strong(xiao_li).
4 Prolog 的實(shí)現(xiàn)
(1)解釋實(shí)現(xiàn):“編譯”階段:即分析Prolog源程序的語(yǔ)法,把它翻譯成便于解釋執(zhí)行的內(nèi)部形式,解釋階段:即對(duì)SLD樹(shù)的深度優(yōu)先搜索,預(yù)定義謂詞的解釋?zhuān)好恳粋€(gè)預(yù)定義謂詞有一個(gè)小的解釋模塊,互相之間基本上是獨(dú)立的,但與全程數(shù)據(jù)結(jié)構(gòu)和主控程序之間要協(xié)調(diào)
(2)編譯實(shí)現(xiàn):Prolog的翻譯:把Prolog程序翻譯成一種高級(jí)程序語(yǔ)言代碼,Prolog的編譯:編譯成Warren抽象機(jī)代碼
5 Prolog語(yǔ)言的常用版本
5.1 Turbo Prolog
由美國(guó)Prolog開(kāi)發(fā)中心(Prolog Development Center, PDC)1986年開(kāi)發(fā)成功、Borland公司對(duì)外發(fā)行,其1.0,2.0,2.1版本取名為T(mén)urbo Prolog,主要在IBM PC系列計(jì)算機(jī),MS-DOS環(huán)境下運(yùn)行。
5.2 PDC Prolog
1990年后,PDC推出新的版本,更名為PDC Prolog 3.0,3.2,它把運(yùn)行環(huán)境擴(kuò)展到OS/2操作系統(tǒng),并且向全世界發(fā)行。
5.3 Visual Prolog
Visual Prolog是基于Prolog語(yǔ)言的可視化集成開(kāi)發(fā)環(huán)境,是PDC推出的基于Windows環(huán)境的智能化編程工具。目前,Visual Prolog在美國(guó)、西歐、日本、加拿大、澳大利亞等國(guó)家和地區(qū)十分流行,是國(guó)際上研究和開(kāi)發(fā)智能化應(yīng)用的主流工具之一。
Visual Prolog具有模式匹配、遞歸、回溯、對(duì)象機(jī)制、事實(shí)數(shù)據(jù)庫(kù)和謂詞庫(kù)等強(qiáng)大功能。它包含構(gòu)建大型應(yīng)用程序所需要的一切特性:圖形開(kāi)發(fā)環(huán)境、編譯器、連接器和調(diào)試器,支持模塊化和面向?qū)ο蟪绦蛟O(shè)計(jì),支持系統(tǒng)級(jí)編程、文件操作、字符串處理、位級(jí)運(yùn)算、算術(shù)與邏輯運(yùn)算,以及與其它編程語(yǔ)言的接口。
6 結(jié)束語(yǔ)
總之,Prolog語(yǔ)言是一種說(shuō)明性的語(yǔ)言,是數(shù)據(jù)與程序結(jié)構(gòu)統(tǒng)一, Prolog是“智能的”:具有內(nèi)置的推理機(jī)實(shí)現(xiàn)從上至下、從左至右的搜索,Prolog能自動(dòng)實(shí)現(xiàn)模式匹配和回溯,并具有具有遞歸的特點(diǎn),作為AI開(kāi)發(fā)的重要工具,我們一定要深入學(xué)習(xí)理解,開(kāi)發(fā)出更多更實(shí)用的應(yīng)用系統(tǒng)。
參考文獻(xiàn):
[1]史忠植.高級(jí)人工智能(第二版).北京:科學(xué)出版社,2006.
[2]廉師友.人工智能技術(shù)導(dǎo)論(第二版).西安:電子科技大學(xué)出版社,2002.
[3]陳群秀.人工智能(遠(yuǎn)程教育研究生課程).http://www.sztvu.com/tsinghua/rgzn/art2011.htm.
[4]Visual Prolog語(yǔ)言簡(jiǎn)介.http://www.kddxy.net/~lei/VIP.html#VPL.
[5]人工智能語(yǔ)言.http://myandyou2008.51.net/rengongzhineng/第十四章人工智能語(yǔ)言.htm.
收稿日期:2007-12-23
作者簡(jiǎn)介:王春蓮(1973-),女,山東德州人,講師,在職同等學(xué)力研究生,研究方向:計(jì)算機(jī)應(yīng)用;王海霞(1976-),女,山東濟(jì)南人,講師,大學(xué)本科。