prolog語(yǔ)言(耐心看完,你就入門(mén)了)

prolog語(yǔ)言(耐心看完,你就入門(mén)了)

ID:21943622

大?。?92.00 KB

頁(yè)數(shù):77頁(yè)

時(shí)間:2018-10-21

上傳者:U-3769
prolog語(yǔ)言(耐心看完,你就入門(mén)了)_第1頁(yè)
prolog語(yǔ)言(耐心看完,你就入門(mén)了)_第2頁(yè)
prolog語(yǔ)言(耐心看完,你就入門(mén)了)_第3頁(yè)
prolog語(yǔ)言(耐心看完,你就入門(mén)了)_第4頁(yè)
prolog語(yǔ)言(耐心看完,你就入門(mén)了)_第5頁(yè)
資源描述:

《prolog語(yǔ)言(耐心看完,你就入門(mén)了)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。

人工智能ArtificialIntelligence(AI)2021/7/6 Prolog語(yǔ)言簡(jiǎn)介Prolog語(yǔ)言是一種以一階謂詞為基礎(chǔ)的邏輯性語(yǔ)言(ProgramminginLogic)2021/7/6 Prolog語(yǔ)言的特點(diǎn)Prolog語(yǔ)言的基本內(nèi)容簡(jiǎn)單的例子2021/7/6 Prolog語(yǔ)言(或者系統(tǒng))是以一階謂詞邏輯的Horn子句集為語(yǔ)法,以Robinson的消解原理為工具,加上深度優(yōu)先的控制策略而形成的人工智能通用程序設(shè)計(jì)語(yǔ)言Prolog語(yǔ)言的特點(diǎn)2021/7/6 Horn子句集消解原理深度優(yōu)先Prolog系統(tǒng)2021/7/6 Prolog具有下列特點(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)組成2021/7/6 ③自動(dòng)實(shí)現(xiàn)模式匹配與回溯。這是人工智能中最常用的兩項(xiàng)操作,Prolog自動(dòng)實(shí)現(xiàn)這些操作④程序易于編寫(xiě)與閱讀。它是面向人的自然語(yǔ)言⑤語(yǔ)句句型少,語(yǔ)法簡(jiǎn)明。只有三種句型2021/7/6 參考資料:雷英杰,張雷,邢清華,孫金萍。VisualProlog語(yǔ)言教程。西安:陜西科學(xué)技術(shù)出版社,2002年2月(380頁(yè),35元)雷英杰,邢清華,孫金萍,張雷。VisualProlog編程、環(huán)境及接口。北京:國(guó)防工業(yè)出版社,2004年1月(412頁(yè),36元)2021/7/6 Prolog語(yǔ)言的基本內(nèi)容1項(xiàng)2Prolog中的語(yǔ)句3表結(jié)構(gòu)4Prolog程序的結(jié)構(gòu)5常用內(nèi)部謂詞6Prolog程序設(shè)計(jì)步驟2021/7/6 符號(hào)說(shuō)明:“::=”表示“定義為”“|”表示“或”,可選“{}”表示“重復(fù)或者出現(xiàn)多個(gè)”1項(xiàng)2021/7/6 項(xiàng)的定義:<項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2021/7/6 <常量>::=<原子>|<數(shù)><原子>::=<標(biāo)識(shí)符原子>|<字符串原子>|<特殊原子><項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2021/7/6 命名:用小寫(xiě)字母或者小寫(xiě)字母開(kāi)頭的小寫(xiě)字母數(shù)字串用途:用于標(biāo)識(shí)對(duì)象的名字、謂詞(對(duì)象間的關(guān)系)或函數(shù)名標(biāo)識(shí)符原子例:john,marry,classmate,teacher2021/7/6 字符串原子是用引號(hào)括起來(lái)的符號(hào)串特殊原子指一些特殊符號(hào),如+、-、*、/等2021/7/6 變量:用于表示暫時(shí)不能命名或者不需要命名的對(duì)象,用大寫(xiě)字母開(kāi)頭<項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2021/7/6 特殊變量:空變量,記作:“_”含義:我們對(duì)問(wèn)題的某一個(gè)變量的值不關(guān)心2021/7/6 <復(fù)合項(xiàng)>::=<原子>(<項(xiàng)>{,<項(xiàng)>})|<項(xiàng)><原子><項(xiàng)>{<原子><項(xiàng)>}<項(xiàng)>::=<常量>|<變量>|<復(fù)合項(xiàng)>2021/7/6 復(fù)合項(xiàng):由一組其它對(duì)象組成的單個(gè)對(duì)象例:函數(shù)項(xiàng):like(john,apple)表:[sa,sb],[1,2,3]表達(dá)式:(12+59)*49-962021/7/6 項(xiàng)常量變量復(fù)合項(xiàng)原子數(shù)標(biāo)識(shí)符原子字符串原子特殊原子<原子>(<項(xiàng)>{,<項(xiàng)>})<項(xiàng)><原子><項(xiàng)>{<原子><項(xiàng)>}2021/7/6 2Prolog中的語(yǔ)句①事實(shí):P.含義:無(wú)條件成立,恒為真例:like(monkey,banana)Prolog中的語(yǔ)句分成三種形式:2021/7/6 ②規(guī)則:P:-P1,P2,…,Pn.“:-”表示“蘊(yùn)涵”“,”表示“合取”含義:若P1,…,Pn均為真時(shí),P為真2021/7/6 ③問(wèn)題(目標(biāo))GoalQ1,Q2,…,Qm.含義:待回答的問(wèn)題,即Q1,…,Qm同時(shí)為真嗎?2021/7/6 從消解角度來(lái)看:①(事實(shí))中,P是Horn子句2021/7/6 ②(規(guī)則)可以表示為P1∧P2∧…∧Pn?P可以轉(zhuǎn)化為~P1∨~P2∨…∨~Pn∨P也是Horn子句,并受全稱(chēng)量詞約束2021/7/6 ③(問(wèn)題)是Q1∧…∧Qm受存在量詞約束,取非后~Q1∨…∨~Qm受全稱(chēng)量詞約束,是Horn子句2021/7/6 Prolog三種形式的語(yǔ)言都是Horn子句問(wèn)題求解就是Horn子句集消解2021/7/6 3表結(jié)構(gòu)表:若干個(gè)元素的有序序列表中的元素:常量、變量、項(xiàng)、表表用“[]”來(lái)表示,元素之間用逗號(hào)或者空格分開(kāi)2021/7/6 例:[1,2,3][a,b,c,d]2021/7/6 用符號(hào)“|”來(lái)劃分表頭(第一個(gè)元素)和表尾(其余元素)特例:當(dāng)只用一個(gè)元素時(shí),表尾為空空表(無(wú)元素),既無(wú)表頭又無(wú)表尾2021/7/6 例: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]2021/7/6 4Prolog程序的結(jié)構(gòu)Prolog的程序分為兩部分:前提部分:所有事實(shí)和規(guī)則問(wèn)題部分:目標(biāo)子句序列2021/7/6 注意:這兩部分不能顛倒。必須前提部分寫(xiě)在前面,問(wèn)題部分寫(xiě)在后面2021/7/6 likes(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=?)fwsmj2021/7/6 Prolog的求解過(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).2021/7/6 第二步: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)2021/7/6 第三步:回到第一個(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)2021/7/6 說(shuō)明:實(shí)際運(yùn)行中,要逐個(gè)試探(搜索),失敗則要回溯,成功也要回溯(求出所有解)2021/7/6 例: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=?)2021/7/6 第一步:?jiǎn)栴}uncle(a,U)與事實(shí)逐個(gè)匹配,不成功Prolog的求解過(guò)程:father(a,b).father(c,d).brother(a,c).2021/7/6 第二步:與規(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)2021/7/6 第一個(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)2021/7/6 Prolog的實(shí)現(xiàn)方法主要是:匹配與回溯匹配:合一過(guò)程、消解過(guò)程回溯:搜索,而且是深度優(yōu)先搜索2021/7/6 關(guān)于匹配的幾點(diǎn)說(shuō)明:第一、一個(gè)變量被置換后,代入了另一個(gè)項(xiàng),則稱(chēng)該變量為實(shí)例化的變量2021/7/6 ①若與另一個(gè)未實(shí)例化的變量匹配,則視為同一變量,兩者共享②若與另一個(gè)實(shí)例化的變量匹配,也變成了實(shí)例化的變量,且兩者同值③若與常量匹配,也變成了實(shí)例化變量,并取常量的值第二、一個(gè)未實(shí)例化的變量可以與任何項(xiàng)匹配:2021/7/6 第三、常量只能與相同的常量匹配第四、實(shí)例化的變量與另一個(gè)實(shí)例化的值相同的變量匹配,也可以與另一個(gè)未實(shí)例化的變量匹配,使另一個(gè)變量實(shí)例化,且約束值相同2021/7/6 5常用的內(nèi)部謂詞內(nèi)部謂詞:Prolog系統(tǒng)本身定義的一些基本謂詞注意:可以直接使用,用戶(hù)不能修改2021/7/6 ①算術(shù)運(yùn)算算術(shù)表達(dá)式由操作數(shù)(數(shù)、變量)、操作符和括號(hào)組成算術(shù)運(yùn)算符號(hào):“+、-、*、/”(加減乘除)2021/7/6 優(yōu)先級(jí):與通常的數(shù)學(xué)運(yùn)算一致形式:中綴:X+Y*Z前綴:+(X,*(Y,Z))2021/7/6 ②比較謂詞eq(X,Y)X=Yne(X,Y)X<>Ygt(X,Y)X>Yls(X,Y)X”,X,Y可以取常量變量謂詞表2021/7/6 第一、當(dāng)一個(gè)變量已經(jīng)實(shí)例化,則可以與任意未實(shí)例化的變量相等,且將其實(shí)例化(賦值功能)第二、兩者均未實(shí)例化,eq(X,Y)恒為真,并視為同一變量對(duì)于“=”(賦值與比較)的幾點(diǎn)說(shuō)明:2021/7/6 第三、均以實(shí)例化,由當(dāng)前值來(lái)決定第四、如果為表,要求對(duì)應(yīng)的元素相等,才為真第五、如果是謂詞,謂詞同名,變?cè)獋€(gè)數(shù)相等,對(duì)應(yīng)的變?cè)嗟?021/7/6 ③輸入輸出謂詞第一、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ù)匹配的成功與否,決定其真假值2021/7/6 ④謂詞cut與fail(特殊謂詞):cut(!):禁止回溯fail:強(qiáng)迫回溯2021/7/6 第一、只允許作為一個(gè)子目標(biāo)出現(xiàn)在程序中第二、第一次遇到它時(shí),總是立刻被滿(mǎn)足,但是不能被重新滿(mǎn)足第三、用戶(hù)可以使用它來(lái)控制回溯方式,切斷一些不必要的回溯,提高程序運(yùn)行效率關(guān)于cut的幾點(diǎn)說(shuō)明:2021/7/6 關(guān)于fail的說(shuō)明:作為一個(gè)子目標(biāo),使Prolog程序運(yùn)行到fail,必定引起回溯2021/7/6 例:求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).2021/7/6 6Prolog程序設(shè)計(jì)步驟第一、說(shuō)明事實(shí):說(shuō)明與待求解的問(wèn)題有關(guān)的事實(shí)。例如,人物事及相互關(guān)系,對(duì)應(yīng)于敘述性知識(shí)對(duì)應(yīng)于Prolog程序的組成部分,設(shè)計(jì)步驟分為:2021/7/6 第二、定義規(guī)則:定義個(gè)體及其相互關(guān)系的推理規(guī)則,反映與待求解問(wèn)題有關(guān)的過(guò)程性知識(shí)第三:確定目標(biāo)(問(wèn)題):提出待求解的問(wèn)題或者確定邏輯推理的目標(biāo)2021/7/6 程序的一般結(jié)構(gòu)(組成部分)VisualProlog程序包括三到四個(gè)基本程序段:第一、域段:說(shuō)明謂詞變量的域(類(lèi)型)第二、謂詞段:說(shuō)明非標(biāo)準(zhǔn)謂詞(用戶(hù)自己的謂詞)2021/7/6 第三、子句段:核心部分,可以寫(xiě)出事實(shí)與規(guī)則第四、目標(biāo)段:設(shè)置內(nèi)部目標(biāo)2021/7/6 域段(domains)Prolog語(yǔ)言中的域用于區(qū)分不同變量類(lèi)型的數(shù)據(jù)相當(dāng)于其它高級(jí)語(yǔ)言中的數(shù)據(jù)類(lèi)型2021/7/6 基本標(biāo)準(zhǔn)域有:char:用單引號(hào)括起來(lái)的單個(gè)字符,例如,’a’integer:整數(shù),范圍為32767到-32768real:實(shí)數(shù),例如,86.72,5.1e+212021/7/6 string:用雙引號(hào)括起來(lái)的字符序列例:“IamfromNanjing”2021/7/6 symbol:有兩種形式:以小寫(xiě)字母開(kāi)頭的字母、數(shù)字和下劃線組成的序列用雙引號(hào)括起來(lái)的字符串序列2021/7/6 Prolog中表示成下列形式:integerlist=integer*“integer”說(shuō)明表中元素的類(lèi)型“*”告訴編譯系統(tǒng),這是一張表表:2021/7/6 例domainstitle,author=symbolpages=integer注:每一個(gè)說(shuō)明的最后無(wú)句號(hào)“.”2021/7/6 謂詞段(predicates)說(shuō)明用戶(hù)自己定義的謂詞說(shuō)明謂詞變?cè)挠?021/7/6 謂詞名:由小寫(xiě)字母開(kāi)頭,由字母、數(shù)字和下劃線組成(標(biāo)識(shí)符原子)謂詞變?cè)念?lèi)型標(biāo)準(zhǔn)域域段中說(shuō)明的其它域2021/7/6 例:domainsperson=symbolpredicatesfather(person)或者father(symbol)alphabet_position(char,integer)謂詞后面無(wú)句號(hào)“.”2021/7/6 子句段(clauses)由事實(shí)與規(guī)則組成說(shuō)明:每一個(gè)事實(shí)或規(guī)則后面必須有句號(hào)“.”2021/7/6 例:clauseslikes(tom,football).classify(X,negative):-X<0.classify(X,positive):-X>0.2021/7/6 目標(biāo)段(goal)必須書(shū)寫(xiě)一個(gè)目標(biāo)段,作為源碼的一部分(內(nèi)部目標(biāo))外部目標(biāo)2021/7/6 例goallikes(tom,X).2021/7/6 注釋?zhuān)憾嘈凶⑨專(zhuān)?*……*/(C/C++中采用的符號(hào))單行注釋?zhuān)?(Matlab中采用的符號(hào))2021/7/6 VisualProlog程序的基本結(jié)構(gòu):domains……(說(shuō)明變量類(lèi)型,無(wú)句號(hào))predicates…..(說(shuō)明謂詞,無(wú)句號(hào))clauses…..(程序段,必須有句號(hào))goal……(目標(biāo)或問(wèn)題,必須有句號(hào))2021/7/6 3例子2021/7/6

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶(hù)上傳,版權(quán)歸屬用戶(hù),天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶(hù)請(qǐng)聯(lián)系客服處理。
關(guān)閉