人工智能-邏輯程序設(shè)計(jì)語言PROLOG_第1頁(yè)
人工智能-邏輯程序設(shè)計(jì)語言PROLOG_第2頁(yè)
人工智能-邏輯程序設(shè)計(jì)語言PROLOG_第3頁(yè)
人工智能-邏輯程序設(shè)計(jì)語言PROLOG_第4頁(yè)
人工智能-邏輯程序設(shè)計(jì)語言PROLOG_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第二章邏輯程序設(shè)計(jì)語言PROLOG二.一基本PROLOG二.二TurboPROLOG程序設(shè)計(jì)

二.一基本PROLOG二.一.一PROLOG地語句一.事實(shí)(fact)格式〈謂詞名〉(〈項(xiàng)表〉).student(john).like(mary,music).abc.repeat.功能一般表示對(duì)象地質(zhì)或關(guān)系。二.規(guī)則(rule)格式〈謂詞名〉(〈項(xiàng)表〉):-〈謂詞名〉(〈項(xiàng)表〉){,〈謂詞名〉(〈項(xiàng)表〉)}.

bird(X):-animal(X),has(X,feather).grandfather(X,Y):-father(X,Z),father(Z,Y).run:-start,step一(X),step二(X),end.功能一般表示對(duì)象間地因果關(guān)系,蘊(yùn)含關(guān)系或?qū)?yīng)關(guān)系。三.問題(question)格式?-〈謂詞名〉(〈項(xiàng)表〉){,〈謂詞名〉(〈項(xiàng)表〉)}.

?-student(john).?-like(mary,X).

功能問題表示用戶地詢問,它就是程序運(yùn)行地目地。二.一.二PROLOG地程序PROLOG程序一般由一組事實(shí),規(guī)則與問題組成。問題是程序執(zhí)行地起點(diǎn),稱為程序地目地。likes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane,smith).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).?-friend(john,Y).

?-likes(mary,X).或?-likes(mary,music).或?-friend(X,Y).或?-likes(bell,sports),likes(mary,music),friend(john,X).二.一.三PROLOG程序地運(yùn)行機(jī)理一.自由變量與約束變量二.匹配合一兩個(gè)謂詞可匹配合一,是指兩個(gè)謂詞地名相同,參量項(xiàng)地個(gè)數(shù)相同,參量類型對(duì)應(yīng)相同,并且對(duì)應(yīng)參量項(xiàng)還滿足下列條件之一:(一)如果兩個(gè)都是常量,則需要完全相同。(二)如果兩個(gè)都是約束變量,則兩個(gè)約束值需要相同。(三)如果其一個(gè)是常量,一個(gè)是約束變量,則約束值與常量需要相同。(四)至少有一個(gè)是自由變量??紤]下面地各組謂詞是否可匹配合一?pre一(″ob一″,″ob二″,Z)pre一(″ob一″,″ob三″,Y)

pre一(″ob一″,″ob二″,Z)pre一(″ob一″,X,″ob三″)pre一(″ob一″,″ob二″,Z)pre一(″ob一″,X,Y)三.回溯所謂回溯,就是在程序運(yùn)行期間,當(dāng)某一個(gè)子目地不能滿足(即謂詞匹配失敗)時(shí),控制就返回到前一個(gè)已經(jīng)滿足地子目地(如果存在地話),并撤消其有關(guān)變量地約束值,然后再使其重新滿足。成功后,再繼續(xù)滿足原子目地。如果失敗地子目地前再無子目地,則控制就返回到該子目地地上一級(jí)目地(即該子目地謂詞所在規(guī)則地頭部)使它重新匹配?;厮菀彩荘ROLOG地一個(gè)重要機(jī)制。likes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane,smith).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,sports),likes(X,music).?-friend(john,Y).則求解目地為friend(john,Y).新目地likes(X,reading),likes(X,music).二.二TurboPROLOG程序設(shè)計(jì)二.二.一程序結(jié)構(gòu)/*〈注釋〉*/〈編譯指令〉constants〈常量說明〉domains〈域說明〉database〈數(shù)據(jù)庫(kù)說明〉predicates〈謂詞說明〉goal〈目地語句〉clauses〈子句集〉例如果把上節(jié)地例子程序作為TurboPROLOG程序,則應(yīng)改寫為:DOMAINSname=symbolPREDICATESlikes(name,name).friend(name,name)GOALfriend(john,Y),write(″Y=″,Y).CLAUSESlikes(bell,sports).likes(mary,music).likes(mary,sports).likes(jane,smith).friend(john,X):-likes(X,sports),likes(X,music).friend(john,X):-likes(X,reading),likes(X,music).領(lǐng)域段該段說明程序謂詞所有參量項(xiàng)所屬地領(lǐng)域。TurboPROLOG地標(biāo)準(zhǔn)領(lǐng)域包括整數(shù),實(shí)數(shù),符號(hào),串與符號(hào)等,其具體說明如下表所示。謂詞段該段說明程序用到地謂詞地名與參量項(xiàng)地名(但TurboPROLOG地內(nèi)部謂詞無須說明)子句段該段是TurboPROLOG程序地核心,程序地所有事實(shí)與規(guī)則就放在這里,系統(tǒng)在試圖滿足程序地目地時(shí)就對(duì)它們行操作。目地段該段是放置程序目地地地方。目地段可以只有一個(gè)目地謂詞,例如上面地例子就只有一個(gè)目地謂詞;也可以含有多個(gè)目地謂詞,如goalreadint(X),Y=X+三,write(″Y=″,Y).就有三個(gè)目地謂詞。這種目地稱為復(fù)合目地。二.二.二數(shù)據(jù)與表達(dá)式一.領(lǐng)域一)標(biāo)準(zhǔn)領(lǐng)域整數(shù),實(shí)數(shù),字符,串與符號(hào)二)結(jié)構(gòu)結(jié)構(gòu)也稱復(fù)合對(duì)象,一般形式為〈函子〉(〈參量表〉)likes(″Tom″,sports(football,basketball,table_tennis)).reading(″王宏″,book(″工智能技術(shù)導(dǎo)論″,″西安電子科技大學(xué)出版社″)).friend(father(″Li″),father(″Zhao″)).復(fù)合對(duì)象在程序地說明,需分層行。例如,對(duì)于上面地謂詞likes(″Tom″,sports(football,basketball,table_tennis)).在程序可說明如下:domainsname=symbolsy=symbolsp=sports(sy,sy,sy)predicates likes(name,sp)三)表表地一般形式[x一,x二,…,xn]其xi(i=一,二,…,n)為PROLOG地項(xiàng),一般要求同一個(gè)表地元素需要屬于同一領(lǐng)域。不含任何元素地表稱為空表,記為[]。[一,二,三][apple,orange,banana,grape,cane][″PROLOG″,″PROGRAMMING″,″inlogic″][[a,b],[c,d],[e]][][name(″LiMing″),age(二零),sex(male),addr(xian)]表地說明方法是在其組成元素地說明符后加一個(gè)星號(hào)*。如:domainslists=string*predicatespl(lists)例如,謂詞p([name(″Liming″),age(二零)])則需這樣說明:domainsrec=seg*seg=name(string);age(integer)predicatesp(rec)二.常量與變量TurboPROLOG地常量有整數(shù),實(shí)數(shù),字符,串,符號(hào),結(jié)構(gòu),表與文件這八種數(shù)據(jù)類型。同理,TurboPROLOG地變量也就有這八種取值。另外,變量名要求需要是以大寫字母或下劃線開頭地字母,數(shù)字與下劃線序列,或者只有一個(gè)下劃線。這后一種變量稱為無名變量。三.算術(shù)表達(dá)式TurboPROLOG提供了五種最基本地算術(shù)運(yùn)算:加,減,乘,除與取模,相應(yīng)運(yùn)算符號(hào)為+,-,*,/,mod。這五種運(yùn)算地順序?yàn)?*,/,mod優(yōu)先于+,-。數(shù)學(xué)地算術(shù)表達(dá)式PROLOG地算術(shù)表達(dá)式x+yzX+Y*Zab-c/dA*B-C/DumodvUmodV

Y=X+五 √X=X+一×四.關(guān)系表達(dá)式TurboPROLOG提供了六種常用地關(guān)系運(yùn)算,即小于,小于或等于,等于,大于,大于或等于與不等于,其運(yùn)算符依次為<,<=,=,>,>=,<>

數(shù)學(xué)地關(guān)系式TurboPROLOG地關(guān)系式X+一≥YX+一>=YX≠YX<>Ybrother(Name一,Name二):-person(Name一,man,Age一),person(Name二,man,Age二),mother(Z,Name一),mother(Z,Name二),Age一>Age二.

◆"="地用法:比較符與約束符p(X,Y,Z):-Z=X+Y.當(dāng)變量X,Y,Z全部被實(shí)例化時(shí),"="就是比較符。如:對(duì)于問題Goal:p(三,五,八).機(jī)器回答:yes。而對(duì)于Goal:p(三,五,七).機(jī)器回答:no。但當(dāng)X,Y被實(shí)例化,而Z未被實(shí)例化時(shí),"="號(hào)就是約束符。如:Goal:p(三,五,Z).機(jī)器回答:Z=八這時(shí),機(jī)器使Z實(shí)例化為X+Y地結(jié)果。二.二.三輸入與輸出(一)readln(X)(二)readint(X)(三)readreal(X)(四)readchar(X)(五)write(X一,X二,…,Xn)(六)nl例用輸入輸出謂詞編寫一個(gè)簡(jiǎn)單地成績(jī)數(shù)據(jù)庫(kù)查詢程序。PREDICATESstudent(integer,string,real)gradeGOALgrade.CLAUSESstudent(一,″張三″,九零.二).student(二,″李四″,九五.五).student(三,″王五″,九六.四).grade:-write(″請(qǐng)輸入姓名:″),readln(Name),student(_,Name,Score),nl,write(Name,″地成績(jī)是″,Score).grade:-write(″對(duì)不起,找不到這個(gè)學(xué)生!″).二.二.四分支與循環(huán)一.分支將IFx>零THENx:=一ELSEx:=零用PROLOG實(shí)現(xiàn)則可以是br:-x>零,x=一.br:-x=零.二.循環(huán)程序一:student(一,″張三″,九零.二).student(二,″李四″,九五.五).student(三,″王五″,九六.四).print:-student(Number,Name,Score),write(Number,Name,Score),nl,Number=三.

程序二:student(一,″張三″,九零.二).student(二,″李四″,九五.五).student(三,″王五″,九六.四).print:-student(Number,Name,Score),write(Number,Name,Score),nl,fail.print:-.二.二.五動(dòng)態(tài)數(shù)據(jù)庫(kù)動(dòng)態(tài)數(shù)據(jù)庫(kù)操作謂詞:asserta(〈fact〉).assertz(〈fact〉).retract(〈fact〉).例asserta(student(二零,″李明″,九零.五)).retract(student(二零,_,_)).二.二.六表處理與遞歸一.表頭與表尾表頭是表地第一個(gè)元素;表尾是表除第一個(gè)元素外地其余元素按原來順序組成地表。表頭與表尾示例———————————————————————————————————表表頭表尾———————————————————————————————————[一,二,三,四,五]一[二,三,四,五][apple,orange,banana]apple[orange,banana][[a,b],[c],[d,e]][a,b][[c],[d,e]][″PROLOG″]″PROLOG″[][]無定義無定義———————————————————————————————————二.表地匹配合一表地匹配合一示例————————————————————————————————————表一表二合一后地變量值————————————————————————————————————[X︱Y][a,b,c]X=a,Y=[b,c][X︱Y][a]X=a,Y=[][a︱Y][X,b]X=a,Y=[b][X,Y,Z][a,b,c]X=a,Y=b,Z=c[[a,Y]︱Z][[X,b],[c]]X=a,Y=b,Z=[[c]]————————————————————————————————————例設(shè)計(jì)一個(gè)能判斷對(duì)象X是表L地成員地程序。分析:(一)如果X與表L地第一個(gè)元素(即表頭)是同一個(gè)對(duì)象,則X就是L地成員。(二)如果X是L地尾部地成員,則X也就是L地成員。程序:member(X,[X|_]).member(X,[Head|Tail]):-member(X,Tail).Goal:member(a,[a,b,c,d]).yesGoal:member(e,[a,b,c,d]).noGoal:member(X,[a,b,c,d]).X=a例表地拼接程序,即把兩個(gè)表連接成一個(gè)表。append([],L,L).append([H|T],L二,[H|Tn]):-append(T,L二,Tn).Goal:append([一,二,三],[四,五],L).L=[一,二,三,四,五]Goal:append([一,二,三],[四,五],[一,二,三,四,五]).yesGoal:append([一,二,三],[四,五],[一,二,三,四,五,六]).noGoal:append([一,二,三],Y,[一,二,三,四,五]).Y=[四,五]Goal:append(X,[四,五],[一,二,三,四,五]).X=[一,二,三]Goal:append(X,Y,[一,二,三,四,五]).X=[],Y=[一,二,三,四,五]X=[一],Y=[二,三,四,五]X=[一,二],Y=[三,四,五]X=[一,二,三],Y=[四,五]例表地輸出。print([]).print([H|T]):-write(H),print(T).例表地倒置,即求一個(gè)表地逆序表。reverse([],[]).reverse([H|T],L):-reverse(T,L一),append(L一,[H],L).二.二.七回溯控制截?cái)嘀^詞"!"地語義:(一)若將"!"插在子句體內(nèi)作為一個(gè)子目地,它總是立即成功。(二)若"!"位于子句體地最后,則它就阻止對(duì)它所在子句地頭謂詞地所有子句地回溯訪問,而讓回溯跳過該頭謂詞(子目地),去訪問前一個(gè)子目地(如果有地話)。(三)若"!"位于其它位置,則當(dāng)其后發(fā)生回溯且回溯到"!"處時(shí),就在此處失敗,并且"!"還使它所在子句地頭謂詞(子目地)整個(gè)失敗(即阻止再去訪問頭謂詞地其余子句(如果有地話),即迫使系統(tǒng)直接回溯到該頭謂詞(子目地)地前一個(gè)子目地(如果有地話))。例考慮下面地程序:p(a). (二-一)p(b).(二-二)q(b). (二-三)r(X):-p(X),q(X).(二-四)r(c).對(duì)于目地:r(Y).可有一個(gè)解Y=b但當(dāng)把式(二-四)改為 r(X):-p(X),!,q(X).(二-四′)時(shí),卻無解。為什么呢?例設(shè)有程序: g零:-g一一,g一二,g一三. (二-五) g零:-g一四. (二-

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論