Prolog語(yǔ)言(耐心看完-你就入門了)_第1頁(yè)
Prolog語(yǔ)言(耐心看完-你就入門了)_第2頁(yè)
Prolog語(yǔ)言(耐心看完-你就入門了)_第3頁(yè)
Prolog語(yǔ)言(耐心看完-你就入門了)_第4頁(yè)
Prolog語(yǔ)言(耐心看完-你就入門了)_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

人工智能ArtificialIntelligence(AI)2024/9/14Prolog語(yǔ)言簡(jiǎn)介

Prolog語(yǔ)言是一種以一階謂詞為基礎(chǔ)的邏輯性語(yǔ)言(ProgramminginLogic)

2024/9/14Prolog語(yǔ)言的特點(diǎn)Prolog語(yǔ)言的基本內(nèi)容簡(jiǎn)單的例子2024/9/14Prolog語(yǔ)言(或者系統(tǒng))是以一階謂詞邏輯的Horn

子句集為語(yǔ)法,以Robinson的消解原理為工具,加上深度優(yōu)先的控制策略而形成的人工智能通用程序設(shè)計(jì)語(yǔ)言

Prolog語(yǔ)言的特點(diǎn)2024/9/14Horn子句集消解原理深度優(yōu)先Prolog系統(tǒng)2024/9/14Prolog具有下列特點(diǎn):

①是一種描述性語(yǔ)言。只需要告訴“系統(tǒng)做什么”,不要告訴系統(tǒng)“如何做”②數(shù)據(jù)與程序的統(tǒng)一表達(dá)。提供一種統(tǒng)一的符號(hào)結(jié)構(gòu)“項(xiàng)”,數(shù)據(jù)與程序都是由項(xiàng)組成

2024/9/14③自動(dòng)實(shí)現(xiàn)模式匹配與回溯。這是人工智能中最常用的兩項(xiàng)操作,Prolog自動(dòng)實(shí)現(xiàn)這些操作④程序易于編寫與閱讀。它是面向人的自然語(yǔ)言

⑤語(yǔ)句句型少,語(yǔ)法簡(jiǎn)明。只有三種句型

2024/9/14參考資料:雷英杰,張雷,邢清華,孫金萍。VisualProlog語(yǔ)言教程。西安:陜西科學(xué)技術(shù)出版社,2002年2月(380頁(yè),35元)雷英杰,邢清華,孫金萍,張雷。VisualProlog編程、環(huán)境及接口。北京:國(guó)防工業(yè)出版社,2004年1月(412頁(yè),36元)2024/9/14Prolog語(yǔ)言的基本內(nèi)容1項(xiàng)2Prolog中的語(yǔ)句3表結(jié)構(gòu)4Prolog程序的結(jié)構(gòu)5常用內(nèi)部謂詞6Prolog程序設(shè)計(jì)步驟2024/9/14符號(hào)說(shuō)明:“::=”表示“定義為”“|”表示“或”,可選“{}”表示“重復(fù)或者出現(xiàn)多個(gè)”1項(xiàng)

2024/9/14項(xiàng)的定義:<項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2024/9/14<常量>::=<原子>|<數(shù)><原子>::=

<標(biāo)識(shí)符原子>|<字符串原子>|<特殊原子><項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2024/9/14命名:用小寫字母或者小寫字母開(kāi)頭的小寫字母數(shù)字串用途:用于標(biāo)識(shí)對(duì)象的名字、謂詞(對(duì)象間的關(guān)系)或函數(shù)名標(biāo)識(shí)符原子例:john,marry,classmate,teacher2024/9/14字符串原子是用引號(hào)括起來(lái)的符號(hào)串特殊原子指一些特殊符號(hào),如+、-、*、

/等

2024/9/14變量:用于表示暫時(shí)不能命名或者不需要命名的對(duì)象,用大寫字母開(kāi)頭

<項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2024/9/14特殊變量:空變量,記作:“_”含義:我們對(duì)問(wèn)題的某一個(gè)變量的值不關(guān)心

2024/9/14<復(fù)合項(xiàng)>::=<原子>(<項(xiàng)>{,<項(xiàng)>})|

<項(xiàng)><原子><項(xiàng)>

{<原子><項(xiàng)>}

<項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2024/9/14復(fù)合項(xiàng):由一組其它對(duì)象組成的單個(gè)對(duì)象例:函數(shù)項(xiàng):like(john,apple)表:[sa,sb],[1,2,3]表達(dá)式:(12+59)*49-962024/9/14項(xiàng)常量變量復(fù)合項(xiàng)原子數(shù)標(biāo)識(shí)符原子字符串原子特殊原子<原子>(<項(xiàng)>{,<項(xiàng)>})<項(xiàng)><原子><項(xiàng)>{<原子><項(xiàng)>}2024/9/142

Prolog中的語(yǔ)句

①事實(shí):P.含義:無(wú)條件成立,恒為真例:like(monkey,banana)Prolog中的語(yǔ)句分成三種形式:2024/9/14②規(guī)則:P:-P1,P2,…,Pn

.“:-

”表示“蘊(yùn)涵”“,”表示“合取”含義:若P1,…,Pn

均為真時(shí),P為真

2024/9/14③問(wèn)題(目標(biāo))GoalQ1,Q2,…,Qm.含義:待回答的問(wèn)題,即Q1,…,Qm

同時(shí)為真嗎?2024/9/14從消解角度來(lái)看:①(事實(shí))中,P是Horn子句2024/9/14②(規(guī)則)可以表示為P1∧P2∧…∧Pn

P可以轉(zhuǎn)化為~P1∨~P2∨…∨~Pn∨P也是Horn子句,并受全稱量詞約束2024/9/14③(問(wèn)題)是

Q1∧…∧Qm

受存在量詞約束,取非后~Q1∨…∨~Qm受全稱量詞約束,是Horn子句2024/9/14Prolog三種形式的語(yǔ)言都是Horn子句問(wèn)題求解就是Horn子句集消解2024/9/143表結(jié)構(gòu)

表:若干個(gè)元素的有序序列表中的元素:常量、變量、項(xiàng)、表

表用“[]”來(lái)表示,元素之間用逗號(hào)或者空格分開(kāi)2024/9/14例:[1,2,3][a,b,c,d]2024/9/14用符號(hào)“|

”來(lái)劃分表頭(第一個(gè)元素)和表尾(其余元素)特例:當(dāng)只用一個(gè)元素時(shí),表尾為空空表(無(wú)元素),既無(wú)表頭又無(wú)表尾

2024/9/14例:P([the,cat,sat,down]).?-P([X|Y]).答案:X=the,Y=[cat,sat,down]

?-P([X,Y|Z]).答案:X=the,Y=cat,Z=[sat,down]

2024/9/144Prolog程序的結(jié)構(gòu)Prolog的程序分為兩部分:

前提部分:所有事實(shí)和規(guī)則

問(wèn)題部分:目標(biāo)子句序列

2024/9/14注意:這兩部分不能顛倒。必須前提部分寫在前面,問(wèn)題部分寫在后面

2024/9/14likes(m,f).likes(m,w).(事實(shí))likes(j,w).likes(j,s).goallikes(m,X),likes(j,X).(問(wèn)題)問(wèn)題:是否m

和j

都喜歡什么東西?(X=?)

fwsmj2024/9/14Prolog的求解過(guò)程現(xiàn)在有兩個(gè)問(wèn)題:likes(m,X)和likes(j,X))第一步:第一個(gè)問(wèn)題likes(m,X)去與事實(shí)匹配(置換與合一),按順序得到{f/X}likes(m,f).likes(m,w).likes(j,w).likes(j,s).2024/9/14第二步:f代替第二個(gè)問(wèn)題likes(j,X)中的X,則得likes(j,f)。再與事實(shí)匹配,不能匹配,失敗,則回溯,忘掉剛才的匹配likes(m,f).likes(m,w).likes(j,w).likes(j,s).likes(m,X)likes(j,X)2024/9/14第三步:回到第一個(gè)問(wèn)題likes(m,X),重新匹配,得到{w/X}第四步:第二個(gè)問(wèn)題變成likes(j,w)。再與事實(shí)匹配,成功第五步:答案就是X=wlikes(m,f).likes(m,w).likes(j,w).likes(j,s).likes(m,X)likes(j,X)2024/9/14說(shuō)明:實(shí)際運(yùn)行中,要逐個(gè)試探(搜索),失敗則要回溯,成功也要回溯(求出所有解)2024/9/14例:father(a,b).a是b的父親father(c,d).brother(a,c).a與c是兄弟關(guān)系uncle(X,Y):-brother(X,Z),father(Z,Y).?-uncle(a,U).問(wèn)題:

a

是誰(shuí)的叔叔?(U=?

)2024/9/14第一步:?jiǎn)栴}uncle(a,U)與事實(shí)逐個(gè)匹配,不成功Prolog的求解過(guò)程:father(a,b).father(c,d).brother(a,c).2024/9/14第二步:與規(guī)則頭(左部)匹配,即尋找合一者,有{a/X,U/Y}轉(zhuǎn)化為兩個(gè)子問(wèn)題:brother(a,Z)和father(Z,U)uncle(X,Y):-brother(X,Z),father(Z,Y).uncle(a,U)2024/9/14第一個(gè)子問(wèn)題brother(a,Z)與事實(shí)匹配,得到{c/Z}代人第二個(gè)子問(wèn)題,有father(c,U)。與事實(shí)匹配,得到{d/U},即U=d,解是:a是d的叔叔father(a,b).father(c,d).brother(a,c).brother(a,Z)father(Z,U)2024/9/14Prolog的實(shí)現(xiàn)方法主要是:匹配與回溯匹配:合一過(guò)程、消解過(guò)程回溯:搜索,而且是深度優(yōu)先搜索2024/9/14關(guān)于匹配的幾點(diǎn)說(shuō)明:第一、一個(gè)變量被置換后,代入了另一個(gè)項(xiàng),則稱該變量為實(shí)例化的變量2024/9/14①若與另一個(gè)未實(shí)例化的變量匹配,則視為同一變量,兩者共享②若與另一個(gè)實(shí)例化的變量匹配,也變成了實(shí)例化的變量,且兩者同值③若與常量匹配,也變成了實(shí)例化變量,并取常量的值第二、一個(gè)未實(shí)例化的變量可以與任何項(xiàng)匹配:2024/9/14第三、常量只能與相同的常量匹配第四、實(shí)例化的變量與另一個(gè)實(shí)例化的值相同的變量匹配,也可以與另一個(gè)未實(shí)例化的變量匹配,使另一個(gè)變量實(shí)例化,且約束值相同2024/9/145常用的內(nèi)部謂詞內(nèi)部謂詞:Prolog系統(tǒng)本身定義的一些基本謂詞注意:可以直接使用,用戶不能修改2024/9/14①算術(shù)運(yùn)算算術(shù)表達(dá)式由操作數(shù)(數(shù)、變量)、操作符和括號(hào)組成算術(shù)運(yùn)算符號(hào):“+、-、*、/”(加減乘除)2024/9/14優(yōu)先級(jí):與通常的數(shù)學(xué)運(yùn)算一致形式:中綴:X+Y*Z

前綴:+(X,*(Y,Z))2024/9/14②比較謂詞eq(X,Y)X=Yne(X,Y)X<>Ygt(X,Y)X>Yls(X,Y)X<Y2024/9/14對(duì)于“=、<>”,X,Y可以取常量變量謂詞表2024/9/14第一、當(dāng)一個(gè)變量已經(jīng)實(shí)例化,則可以與任意未實(shí)例化的變量相等,且將其實(shí)例化(賦值功能)第二、兩者均未實(shí)例化,eq(X,Y)恒為真,并視為同一變量對(duì)于“=”(賦值與比較)的幾點(diǎn)說(shuō)明:2024/9/14第三、均以實(shí)例化,由當(dāng)前值來(lái)決定第四、如果為表,要求對(duì)應(yīng)的元素相等,才為真第五、如果是謂詞,謂詞同名,變?cè)獋€(gè)數(shù)相等,對(duì)應(yīng)的變?cè)嗟?024/9/14③輸入輸出謂詞第一、write(X):向輸出設(shè)備輸出實(shí)例化結(jié)果第二、read(X):

當(dāng)X

未實(shí)例化時(shí),輸入一個(gè)項(xiàng)當(dāng)X

在輸入前已經(jīng)實(shí)例化,則讀入項(xiàng)將與X

匹配,根據(jù)匹配的成功與否,決定其真假值

2024/9/14④謂詞cut與fail(特殊謂詞):cut(!):禁止回溯fail:強(qiáng)迫回溯2024/9/14第一、只允許作為一個(gè)子目標(biāo)出現(xiàn)在程序中第二、第一次遇到它時(shí),總是立刻被滿足,但是不能被重新滿足第三、用戶可以使用它來(lái)控制回溯方式,切斷一些不必要的回溯,提高程序運(yùn)行效率關(guān)于cut的幾點(diǎn)說(shuō)明:2024/9/14關(guān)于fail的說(shuō)明:作為一個(gè)子目標(biāo),使Prolog程序運(yùn)行到fail,必定引起回溯2024/9/14例:求1到n

之間的和定義一個(gè)二元謂詞sum(N,X),其中X

表示和答案是:X=21去掉“!”,會(huì)發(fā)生什么?sum(1,1):-!.sum(N,R):-N1=N-1,sum(N1,R1),R=R1+N.?-sum(6,X).2024/9/146Prolog程序設(shè)計(jì)步驟第一、說(shuō)明事實(shí):說(shuō)明與待求解的問(wèn)題有關(guān)的事實(shí)。例如,人物事及相互關(guān)系,對(duì)應(yīng)于敘述性知識(shí)對(duì)應(yīng)于Prolog程序的組成部分,設(shè)計(jì)步驟分為:2024/9/14第二、定義規(guī)則:定義個(gè)體及其相互關(guān)系的推理規(guī)則,反映與待求解問(wèn)題有關(guān)的過(guò)程性知識(shí)第三:確定目標(biāo)(問(wèn)題):提出待求解的問(wèn)題或者確定邏輯推理的目標(biāo)2024/9/14程序的一般結(jié)構(gòu)(組成部分)

VisualProlog程序包括三到四個(gè)基本程序段:第一、域段:說(shuō)明謂詞變量的域(類型)第二、謂詞段:說(shuō)明非標(biāo)準(zhǔn)謂詞(用戶自己的謂詞)2024/9/14第三、子句段:核心部分,可以寫出事實(shí)與規(guī)則第四、目標(biāo)段:設(shè)置內(nèi)部目標(biāo)2024/9/14域段(domains)Prolog語(yǔ)言中的域用于區(qū)分不同變量類型的數(shù)據(jù)相當(dāng)于其它高級(jí)語(yǔ)言中的數(shù)據(jù)類型2024/9/14基本標(biāo)準(zhǔn)域有:char:用單引號(hào)括起來(lái)的單個(gè)字符,例如,’a’integer:整數(shù),范圍為32767到-32768real:實(shí)數(shù),例如,86.72,5.1e+212024/9/14string:用雙引號(hào)括起來(lái)的字符序列

例:“IamfromNanjing”2024/9/14symbol:有兩種形式:以小寫字母開(kāi)頭的字母、數(shù)字和下劃線組成的序列用雙引號(hào)括起來(lái)的字符串序列

2024/9/14Prolog中表示成下列形式:

integerlist=integer*“integer”說(shuō)明表中元素的類型“*

”告訴編譯系統(tǒng),這是一張表

表:2024/9/14例domainstitle,author=symbolpages=integer注:每一個(gè)說(shuō)明的最后無(wú)句號(hào)“.”2024/9/14謂詞段(predicates)說(shuō)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論