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

下載本文檔

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

文檔簡介

人工智能ArtificialIntelligence(AI)2024/9/14Prolog語言簡介

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

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

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

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

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

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

⑤語句句型少,語法簡明。只有三種句型

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

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

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

/等

2024/9/14變量:用于表示暫時不能命名或者不需要命名的對象,用大寫字母開頭

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

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

<項><原子><項>

{<原子><項>}

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

Prolog中的語句

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

.“:-

”表示“蘊涵”“,”表示“合取”含義:若P1,…,Pn

均為真時,P為真

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

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

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

Q1∧…∧Qm

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

表:若干個元素的有序序列表中的元素:常量、變量、項、表

表用“[]”來表示,元素之間用逗號或者空格分開2024/9/14例:[1,2,3][a,b,c,d]2024/9/14用符號“|

”來劃分表頭(第一個元素)和表尾(其余元素)特例:當只用一個元素時,表尾為空空表(無元素),既無表頭又無表尾

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的程序分為兩部分:

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

問題部分:目標子句序列

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

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

和j

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

fwsmj2024/9/14Prolog的求解過程現(xiàn)在有兩個問題:likes(m,X)和likes(j,X))第一步:第一個問題likes(m,X)去與事實匹配(置換與合一),按順序得到{f/X}likes(m,f).likes(m,w).likes(j,w).likes(j,s).2024/9/14第二步:f代替第二個問題likes(j,X)中的X,則得likes(j,f)。再與事實匹配,不能匹配,失敗,則回溯,忘掉剛才的匹配likes(m,f).likes(m,w).likes(j,w).likes(j,s).likes(m,X)likes(j,X)2024/9/14第三步:回到第一個問題likes(m,X),重新匹配,得到{w/X}第四步:第二個問題變成likes(j,w)。再與事實匹配,成功第五步:答案就是X=wlikes(m,f).likes(m,w).likes(j,w).likes(j,s).likes(m,X)likes(j,X)2024/9/14說明:實際運行中,要逐個試探(搜索),失敗則要回溯,成功也要回溯(求出所有解)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).問題:

a

是誰的叔叔?(U=?

)2024/9/14第一步:問題uncle(a,U)與事實逐個匹配,不成功Prolog的求解過程:father(a,b).father(c,d).brother(a,c).2024/9/14第二步:與規(guī)則頭(左部)匹配,即尋找合一者,有{a/X,U/Y}轉(zhuǎn)化為兩個子問題:brother(a,Z)和father(Z,U)uncle(X,Y):-brother(X,Z),father(Z,Y).uncle(a,U)2024/9/14第一個子問題brother(a,Z)與事實匹配,得到{c/Z}代人第二個子問題,有father(c,U)。與事實匹配,得到{d/U},即U=d,解是:a是d的叔叔father(a,b).father(c,d).brother(a,c).brother(a,Z)father(Z,U)2024/9/14Prolog的實現(xiàn)方法主要是:匹配與回溯匹配:合一過程、消解過程回溯:搜索,而且是深度優(yōu)先搜索2024/9/14關(guān)于匹配的幾點說明:第一、一個變量被置換后,代入了另一個項,則稱該變量為實例化的變量2024/9/14①若與另一個未實例化的變量匹配,則視為同一變量,兩者共享②若與另一個實例化的變量匹配,也變成了實例化的變量,且兩者同值③若與常量匹配,也變成了實例化變量,并取常量的值第二、一個未實例化的變量可以與任何項匹配:2024/9/14第三、常量只能與相同的常量匹配第四、實例化的變量與另一個實例化的值相同的變量匹配,也可以與另一個未實例化的變量匹配,使另一個變量實例化,且約束值相同2024/9/145常用的內(nèi)部謂詞內(nèi)部謂詞:Prolog系統(tǒng)本身定義的一些基本謂詞注意:可以直接使用,用戶不能修改2024/9/14①算術(shù)運算算術(shù)表達式由操作數(shù)(數(shù)、變量)、操作符和括號組成算術(shù)運算符號:“+、-、*、/”(加減乘除)2024/9/14優(yōu)先級:與通常的數(shù)學(xué)運算一致形式:中綴: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對于“=、<>”,X,Y可以取常量變量謂詞表2024/9/14第一、當一個變量已經(jīng)實例化,則可以與任意未實例化的變量相等,且將其實例化(賦值功能)第二、兩者均未實例化,eq(X,Y)恒為真,并視為同一變量對于“=”(賦值與比較)的幾點說明:2024/9/14第三、均以實例化,由當前值來決定第四、如果為表,要求對應(yīng)的元素相等,才為真第五、如果是謂詞,謂詞同名,變元個數(shù)相等,對應(yīng)的變元相等2024/9/14③輸入輸出謂詞第一、write(X):向輸出設(shè)備輸出實例化結(jié)果第二、read(X):

當X

未實例化時,輸入一個項當X

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

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

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

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

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

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

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

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

integerlist=integer*“integer”說明表中元素的類型“*

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

表:2024/9/14例domainstitle,author=symbolpages=integer注:每一個說明的最后無句號“.”2024/9/14謂詞段(predicates)說

溫馨提示

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

評論

0/150

提交評論