智能控制語言prolog簡介計算機(jī)教學(xué)課件PPT

上傳人:文*** 文檔編號:55814349 上傳時間:2022-02-18 格式:PPT 頁數(shù):133 大?。?.09MB
收藏 版權(quán)申訴 舉報 下載
智能控制語言prolog簡介計算機(jī)教學(xué)課件PPT_第1頁
第1頁 / 共133頁
智能控制語言prolog簡介計算機(jī)教學(xué)課件PPT_第2頁
第2頁 / 共133頁
智能控制語言prolog簡介計算機(jī)教學(xué)課件PPT_第3頁
第3頁 / 共133頁

本資源只提供3頁預(yù)覽,全部文檔請下載后查看!喜歡就下載吧,查找使用更方便

40 積分

下載資源

資源描述:

《智能控制語言prolog簡介計算機(jī)教學(xué)課件PPT》由會員分享,可在線閱讀,更多相關(guān)《智能控制語言prolog簡介計算機(jī)教學(xué)課件PPT(133頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、第三章第三章 智能控制語言智能控制語言prolog簡介簡介21:021第三章第三章 智能控制語言智能控制語言prolog簡介簡介21:022 PrologProlog初體驗(yàn)初體驗(yàn) 什么是什么是PrologProlog 為什么要用為什么要用PrologProlog編程編程 PrologProlog的特點(diǎn)的特點(diǎn) PrologProlog入門入門 什么是什么是Prolog?Prolog (Programming in LOGic的縮寫)是一種邏輯編程的縮寫)是一種邏輯編程語言。它建立在語言。它建立在 邏輯學(xué)邏輯學(xué) 的理論基礎(chǔ)之上,的理論基礎(chǔ)之上, 最初被運(yùn)用于最初被運(yùn)用于 自自然語言然語言 等研究領(lǐng)

2、域?,F(xiàn)在它已被廣泛的應(yīng)用在等研究領(lǐng)域。現(xiàn)在它已被廣泛的應(yīng)用在 人工智能人工智能 的研的研究中,它可以用來建造究中,它可以用來建造 專家系統(tǒng)專家系統(tǒng) 、自然語言理解、智能知識、自然語言理解、智能知識庫等。同時它對一些通常的應(yīng)用程序的編寫也很有幫助。使庫等。同時它對一些通常的應(yīng)用程序的編寫也很有幫助。使用它能夠比其他的語言更快速地開發(fā)程序,因?yàn)樗木幊谭接盟軌虮绕渌恼Z言更快速地開發(fā)程序,因?yàn)樗木幊谭椒ǜ笫鞘褂眠壿嫷恼Z言來描述程序。法更象是使用邏輯的語言來描述程序。 21:023 什么是什么是PrologProlog Prolog語言最早由語言最早由Aix-Marseille大學(xué)的大學(xué)的Al

3、ain Colmerauer與與Phillipe Roussel等人于等人于60年代末研究開年代末研究開發(fā)。發(fā)。 第一個第一個Prolog編譯器是編譯器是David Warren編寫的。編寫的。 Prolog一直在北美和歐洲被廣泛使用。日本政府曾經(jīng)為了一直在北美和歐洲被廣泛使用。日本政府曾經(jīng)為了建造智能計算機(jī)而用建造智能計算機(jī)而用Prolog來開發(fā)第五代計算機(jī)系統(tǒng)。來開發(fā)第五代計算機(jī)系統(tǒng)。 80年代年代Borland開發(fā)的開發(fā)的Turbo Prolog,進(jìn)一步普及了,進(jìn)一步普及了Prolog的使用。的使用。 1995年確定了年確定了ISO Prolog標(biāo)準(zhǔn)。標(biāo)準(zhǔn)。 21:024 什么是什么是P

4、rologProlog比如一群年輕人正在戀愛,每個人都有自己心中所追求的對象: 張學(xué)友愛王菲張學(xué)友愛王菲張學(xué)友愛周慧敏張學(xué)友愛周慧敏王菲愛謝廷峰王菲愛謝廷峰周慧敏愛張學(xué)友周慧敏愛張學(xué)友謝廷峰愛王菲謝廷峰愛王菲謝廷峰愛周慧敏謝廷峰愛周慧敏劉德華愛周慧敏劉德華愛周慧敏我們說兩個年輕人要互相都喜愛,他們就算是一對情侶,那么上面的誰和誰是情侶呢?21:025 PrologProlog初體驗(yàn)初體驗(yàn)愛(張學(xué)友,王菲).那么我們?nèi)绾斡胮rolog語言實(shí)現(xiàn)呢?“張學(xué)友愛王菲”是一條已知的事實(shí),用prolog語言來表達(dá)就是:21:026 PrologProlog初體驗(yàn)初體驗(yàn)l注意注意1 1:這里是為了閱讀方便才

5、使用漢字的,真正的prolog是不允許使用除了基本字符以外字符的,也就是說,上面的句子必須寫成love(zhangxueyou,wanfei).,電腦才能夠真正的理解 l注意注意2 2:最末尾的“.”一定不能掉,它表示一個句子結(jié)束。 l注意注意3 3:上面詞匯對于電腦來說并沒有真正的含義,所以我們完全可以用 ai(zxy,wf).來表達(dá)這個關(guān)系,更進(jìn)一步,我們甚至可以用 xxx(a,b).來表達(dá),只要你自己心里清楚xxx表示愛,a表示張學(xué)友,b表示王菲就可以了。 l注意注意4 4:張學(xué)友和王菲的順序也沒有特別的規(guī)定,你完全可以把他們換個位置:愛(王菲,張學(xué)友). 只要你心里清楚它表達(dá)的意思就行

6、了,而以后都遵循這種被愛的人在前面的順序,就不會出錯。 21:027 PrologProlog初體驗(yàn)初體驗(yàn)Prolog初體驗(yàn)初體驗(yàn)?zāi)敲辞閭H的概念怎么定義呢?也很簡單!:-在prolog中表示“如果”的意思,我們使用它來定義規(guī)則。上面這句話的意思就是,某人甲和某人乙是情侶的規(guī)則就是:某人甲愛某人乙,并且某人乙愛某人甲。 當(dāng)然為了能夠讓電腦運(yùn)行,這個句子要改為英文的:情侶(某人甲,某人乙):-愛(某人甲,某人乙),愛(某人乙,某人甲).lovers(X,Y):-love(X,Y),love(Y,X).注意:在prolog中以小寫字符開頭的字符串代表確知的事物,比如love表示愛這種關(guān)系,而zhan

7、gxueyou表示張學(xué)友。而以大寫字母開頭的字符串表示未確定的事物,翻譯成漢語就是某某 21:028完整的可運(yùn)行的prolog程序如下:love(zhangxueyou,wangfei).love(zhangxueyou,zhouhuimin).love(wangfei,xietingfeng).love(zhouhuimin,zhangxueyou).love(xietingfeng,wangfei).love(xietingfeng,zhouhuimin).love(liudehua,zhouhuimin).lovers(X,Y):-love(X,Y),love(Y,X).完整的prolo

8、g程序是有事實(shí)和規(guī)則組成的。事實(shí)用來儲存一些數(shù)據(jù),而規(guī)則用來儲存某種可以推理出來的關(guān)系。21:029 PrologProlog初體驗(yàn)初體驗(yàn)把上面的程序調(diào)入prolog解釋器然后就可以對以上的程序進(jìn)行詢問。prolog解釋器的提示符號為“?-”,用戶只需要在在這個提示符后面輸入相應(yīng)的句子就可以了。讓我們來看第一個詢問:?-love(zhangxueyou,wangfei).事實(shí)上我們的詢問完全和程序中的第一條事實(shí)一樣,這個詢問是“是非”詢問,也就是說電腦回答的答案是yes或者no。上面的詢問的含義是:就你所知,張學(xué)友愛王菲么?由于我們的程序中間有這樣的事實(shí),所以解釋器將回答是yes.21:021

9、0 PrologProlog初體驗(yàn)初體驗(yàn)如果我們問:?-love(zhangxueyou,liudehua). 解釋器將回答 No.因?yàn)樗鼪]有發(fā)現(xiàn)love(zhangxueyou,liudehua).這個事實(shí)21:0211 PrologProlog初體驗(yàn)初體驗(yàn)在詢問中還可以使用大寫字母代表未知的事物,讓解釋器找到答案。例如:?-love(zhangxueyou,X).這句話詢問的是:張學(xué)友都喜歡那些人。解釋器將給出答案:X=wangfei;X=zhouhuimin;no.注意注意1 1:上面的兩個“;”是人工輸入的,當(dāng)解釋器找到一個答案之后,它將這個答案輸出,并且等待用戶的進(jìn)一步輸入,如果用戶

10、輸入“;”,解釋器將繼續(xù)尋找其他的答案,如果輸入的是別的符號,解釋器將終止查詢。 注意注意2 2:最后那個no.是因?yàn)?,系統(tǒng)在輸出了zhouhuimin這個答案以后,用戶輸入“;”, 表示還想知道其他的答案,而解釋器又找不到其他的答案了,于是輸出no.來終止查詢。 21:0212 PrologProlog初體驗(yàn)初體驗(yàn)我們再看一個例子:?-love(X,zhouhuimin).X=zhangxueyou;X=xietingfeng;X=liudehua;no. 21:0213 PrologProlog初體驗(yàn)初體驗(yàn)在上面的詢問中,我們只涉及到對事實(shí)的查詢,下面我們來看規(guī)則的用法?- lovers(

11、X,Y).X = zhangxueyou Y = zhouhuimin ;X = wangfeiY = xietingfeng ;X = zhouhuiminY = zhangxueyou ;X = xietingfengY = wangfei ;no我們看到lovers(X,Y).找出了系統(tǒng)中所有的戀人。不過每對戀人被顯示了兩次,這是因?yàn)閜rolog是考慮順序的,也就是說lovers(a,b).和lovers(b,a).并不等價。 21:0214 PrologProlog初體驗(yàn)初體驗(yàn)再看一個例子: ?- lovers(wangfei,Y). Y = xietingfeng;no 同樣是lov

12、ers,根據(jù)其參數(shù)不同,功能也不同,這也是prolog的一個大特點(diǎn) 21:0215 PrologProlog初體驗(yàn)初體驗(yàn)最后讓我們編寫一個尋找情敵的規(guī)則來結(jié)束這次初體驗(yàn)。rival_in_love(X,Y):-love(X,Z),not(love(Z,X),love(Z,Y).這段程序可以理解為:Y是X的情敵的條件是:X喜歡Z(代表某個人),而Z不喜歡X,而Y是Z喜歡的人21:0216 PrologProlog初體驗(yàn)初體驗(yàn)尋找情敵?- rival_in_love(X,Y). X = zhangxueyouY = xietingfeng ;X = xietingfengY = zhangxuey

13、ou ;X = liudehuaY = zhangxueyou ; no21:0217 PrologProlog初體驗(yàn)初體驗(yàn)理論上來說使用理論上來說使用c c語言可以編制任何種類的程序,甚語言可以編制任何種類的程序,甚至連至連prologprolog語言都是使用語言都是使用c c語言編寫的。不過對于急語言編寫的。不過對于急于開發(fā)應(yīng)用程序的用戶,最關(guān)心的是如何最經(jīng)濟(jì)最有于開發(fā)應(yīng)用程序的用戶,最關(guān)心的是如何最經(jīng)濟(jì)最有效率的開發(fā)程序,效率的開發(fā)程序,prologprolog提供了一個選擇的余地。提供了一個選擇的余地。prologprolog很適合于開發(fā)有關(guān)人工智能方面的程序,例很適合于開發(fā)有關(guān)人工智

14、能方面的程序,例如:專家系統(tǒng)、自然語言理解、定理證明以及許多如:專家系統(tǒng)、自然語言理解、定理證明以及許多智力游戲。曾經(jīng)有人預(yù)言智力游戲。曾經(jīng)有人預(yù)言prologprolog將成為下一代計算將成為下一代計算機(jī)的主要語言,雖然這個夢想目前還很難實(shí)現(xiàn),不機(jī)的主要語言,雖然這個夢想目前還很難實(shí)現(xiàn),不過世界上已經(jīng)有許多過世界上已經(jīng)有許多prologprolog的應(yīng)用實(shí)例了。之所以的應(yīng)用實(shí)例了。之所以大多數(shù)人都不了解它,是因?yàn)樗膽?yīng)用范圍比較特大多數(shù)人都不了解它,是因?yàn)樗膽?yīng)用范圍比較特殊而已。殊而已。21:0218 為什么要用為什么要用PrologProlog編程編程2022-2-10Prolog語言(

15、或者系統(tǒng))是以一階謂詞邏輯的為語法,以Robinson的為工具,加上而形成的人工智能通用程序設(shè)計語言 PrologProlog的特點(diǎn)的特點(diǎn)2022-2-10Horn子句集消解原理深度優(yōu)先Prolog系統(tǒng) PrologProlog的特點(diǎn)的特點(diǎn) prolog程序沒有特定的運(yùn)行順序,其運(yùn)行順序是由程序沒有特定的運(yùn)行順序,其運(yùn)行順序是由電腦決定的,而不是編程序的人。電腦決定的,而不是編程序的人。從這個意義上來說,從這個意義上來說,prologprolog程序不是真正意義上的程序不是真正意義上的程序。所謂程序就是按照一定的步驟運(yùn)行的計算機(jī)程序。所謂程序就是按照一定的步驟運(yùn)行的計算機(jī)指令,而指令,而pro

16、logprolog程序的運(yùn)行步驟不由人來決定。它程序的運(yùn)行步驟不由人來決定。它更像一種描述型的語言,用特定的方法描述一個問更像一種描述型的語言,用特定的方法描述一個問題,然后由電腦自動找到這個問題的答案。舉個極題,然后由電腦自動找到這個問題的答案。舉個極端的例子,你只需要把某個數(shù)學(xué)題目告訴它,它就端的例子,你只需要把某個數(shù)學(xué)題目告訴它,它就會自動的找到答案,而不像使用其他的語言一樣,會自動的找到答案,而不像使用其他的語言一樣,必須人工的編制出某種算法。必須人工的編制出某種算法。21:0221 PrologProlog的特點(diǎn)的特點(diǎn) prolog程序中沒有程序中沒有if、when、case、for

17、這樣的這樣的控制流程語句??刂屏鞒陶Z句。 既然程序的運(yùn)行方式有電腦自己決定,當(dāng)然就用既然程序的運(yùn)行方式有電腦自己決定,當(dāng)然就用不到這些控制流程的語句了。通常情況下,程序不到這些控制流程的語句了。通常情況下,程序員不需要了解程序的運(yùn)行過程,只需要注重程序員不需要了解程序的運(yùn)行過程,只需要注重程序的描述是否全面,不過的描述是否全面,不過prologprolog也提供了一些控制也提供了一些控制流程的方法,這些方法和其他語言中的方法有很流程的方法,這些方法和其他語言中的方法有很大的區(qū)別。大的區(qū)別。21:0222 PrologProlog的特點(diǎn)的特點(diǎn) prologprolog程序和數(shù)據(jù)高度統(tǒng)一。程序和數(shù)

18、據(jù)高度統(tǒng)一。 在在prologprolog程序中,是很難分清楚哪些是程序,哪些程序中,是很難分清楚哪些是程序,哪些是數(shù)據(jù)的。事實(shí)上,是數(shù)據(jù)的。事實(shí)上,prologprolog中的所有東西都有相中的所有東西都有相同的形式,也就是說數(shù)據(jù)就是程序,程序就是數(shù)同的形式,也就是說數(shù)據(jù)就是程序,程序就是數(shù)據(jù)。據(jù)。 舉一個其他語言的例子:如果想用舉一個其他語言的例子:如果想用c c語言編寫一個語言編寫一個計算某個數(shù)學(xué)表達(dá)式的程序很簡單計算某個數(shù)學(xué)表達(dá)式的程序很簡單( (比如:比如:a=2+54)a=2+54),因?yàn)檫@是一段程序。但是如果想編寫一,因?yàn)檫@是一段程序。但是如果想編寫一個計算用戶輸入的表達(dá)式的值的

19、程序就很困難了。個計算用戶輸入的表達(dá)式的值的程序就很困難了。因?yàn)橛脩糨斎氲氖且欢螖?shù)據(jù)因?yàn)橛脩糨斎氲氖且欢螖?shù)據(jù)( (字符串字符串) ),如果想讓,如果想讓c c語言處理這個字符串,就需要很多方面的技術(shù)。語言處理這個字符串,就需要很多方面的技術(shù)。則正是因?yàn)樵趧t正是因?yàn)樵赾 c語言中,程序和數(shù)據(jù)是分開的。而語言中,程序和數(shù)據(jù)是分開的。而在在prologprolog就不存在這個問題,你甚至可以很輕松就不存在這個問題,你甚至可以很輕松的編寫處理其它的編寫處理其它prologprolog程序的程序。程序的程序。 21:0223 PrologProlog的特點(diǎn)的特點(diǎn) prolog程序?qū)嶋H上是一個智能數(shù)據(jù)庫程

20、序?qū)嶋H上是一個智能數(shù)據(jù)庫 prologprolog的原理就是關(guān)系數(shù)據(jù)庫,它是建立在關(guān)系的原理就是關(guān)系數(shù)據(jù)庫,它是建立在關(guān)系數(shù)據(jù)庫的基礎(chǔ)上的。使用數(shù)據(jù)庫的基礎(chǔ)上的。使用prologprolog可以很方便的處可以很方便的處理數(shù)據(jù)。理數(shù)據(jù)。21:0224 PrologProlog的特點(diǎn)的特點(diǎn) 強(qiáng)大的遞歸功能強(qiáng)大的遞歸功能 遞歸是一種非常簡潔的方式,它能夠有效的解決遞歸是一種非常簡潔的方式,它能夠有效的解決許多難題。在許多難題。在prologprolog中,遞歸的功能得到了充分中,遞歸的功能得到了充分的體現(xiàn)。的體現(xiàn)。21:0225 PrologProlog的特點(diǎn)的特點(diǎn)進(jìn)入進(jìn)入prolog世界世界進(jìn)入進(jìn)

21、入prolog世界世界n和其他的語言一樣,最好的學(xué)習(xí)方法是實(shí)踐。本課程將使用Prolog的解釋器來向大家介紹幾個具體的應(yīng)用程序的編寫過程。 l首先你應(yīng)該擁有一個Prolog的解釋器,你可以在互聯(lián)網(wǎng)上找到它。關(guān)于解釋器的使用,請參閱相關(guān)的使用說明文檔,建議使用amzi prolog 或者swi prolog來運(yùn)行課程中出現(xiàn)的程序。進(jìn)入進(jìn)入prolog世界世界l 邏輯編程邏輯編程什么叫邏輯編程?也許你還沒有一個整體的印象,還是讓我們首先來研究一個簡單的例子吧。運(yùn)用經(jīng)典的邏輯理論,我們可以說“所有的人(person)都屬于人類(moral)”,如果用Prolog的語言來說就是“對于所有的X,只要X是

22、一個人,它就屬于人類?!眒ortal(X):-person(X). 同樣,我們還可以加入一些簡單的事實(shí),比如:蘇格拉底(socrates)是一個人。person(socrates).有了這兩條邏輯聲明,Prolog就可以判斷蘇格拉底是不是屬于人類。在Prolog的Listener中鍵入如下的命令:?-mortal(socrates). (此句中的?-是Listener的提示符,本句表示詢問蘇格拉底是不是屬于人類。)Linstener將給出答案:yes進(jìn)入進(jìn)入prolog世界世界l 邏輯編程邏輯編程什么叫邏輯編程?也許你還沒有一個整體的印象,還是讓我們首先來研究一個簡單的例子吧。運(yùn)用經(jīng)典的邏輯理

23、論,我們可以說“所有的人(person)都屬于人類(moral)”,如果用Prolog的語言來說就是“對于所有的X,只要X是一個人,它就屬于人類?!眒ortal(X):-person(X). 我們還可以詢問,“誰屬于人類?”?-mortal(X).我們會得到如下的答案:X= socrates進(jìn)入進(jìn)入prolog世界世界l 當(dāng)然,一個完整的程序不能只包括邏輯運(yùn)算部分,還必須擁有輸入輸出,乃至用戶界面部分。很遺憾,Prolog在這些方面做得不好,或者說很差。不過它還是提供了一些基本的方法的。下面是上述的程序一個完整的例子。l 這個簡單的例子顯示了Prolog的一些強(qiáng)大的功能。它能讓程序代碼更簡潔、

24、更容易編寫。在多數(shù)情況下Prolog的程序員不需要關(guān)心程序的運(yùn)行流程,這些都由Prolog自動地完成了。進(jìn)入進(jìn)入prolog世界世界% This is the syntax for comments. % MORTAL - The first illustrative Prolog program mortal(X) :- person(X).person(socrates).person(plato).person(aristotle).mortal_report:-write(Known mortals are:),nl, mortal(X), write(X),nl,fail.把這個程序

25、調(diào)入Listener中,運(yùn)行mortal_report.。?- mortal_report. Known mortals are:socratesplatoaristotleno 進(jìn)入進(jìn)入prolog世界世界假設(shè)你所扮演的角色是一個三歲的小女孩,你想睡覺了,假設(shè)你所扮演的角色是一個三歲的小女孩,你想睡覺了,可是沒有毛毯(可是沒有毛毯(naninani)你就不能安心的睡覺。所以你必)你就不能安心的睡覺。所以你必須在那個大房子中找到你的毛毯,這就是你的任務(wù)須在那個大房子中找到你的毛毯,這就是你的任務(wù)角色扮演游戲角色扮演游戲21:0232Prolog入門之入門之-1.事實(shí)事實(shí) 事實(shí)(事實(shí)(facts

26、)是)是prolog中最簡單的謂詞(中最簡單的謂詞(predicate)。它)。它和關(guān)系數(shù)據(jù)庫中的記錄十分相似。和關(guān)系數(shù)據(jù)庫中的記錄十分相似。 謂詞:謂詞:Prolog語言的基本組成元素,可以是一段程序、一個語言的基本組成元素,可以是一段程序、一個數(shù)據(jù)類型或者是一種關(guān)系。它由謂詞名和參數(shù)組成。兩個名數(shù)據(jù)類型或者是一種關(guān)系。它由謂詞名和參數(shù)組成。兩個名稱相同而參數(shù)的數(shù)目不同的謂詞是不同的謂詞。稱相同而參數(shù)的數(shù)目不同的謂詞是不同的謂詞。 事實(shí)的語法結(jié)構(gòu)如下:事實(shí)的語法結(jié)構(gòu)如下:pred(arg1, arg2, . argN).其中其中pred為謂詞的名稱。為謂詞的名稱。arg1,.為參數(shù),共有為參

27、數(shù),共有N個。個。.是所有的是所有的Prolog子句的結(jié)束符。子句的結(jié)束符。 參數(shù)可以是參數(shù)可以是 整數(shù)(整數(shù)(integer):絕對值小于某一個數(shù)的正數(shù)或負(fù)數(shù)。:絕對值小于某一個數(shù)的正數(shù)或負(fù)數(shù)。 原子(原子(atom):由小寫字母開頭的字符串。):由小寫字母開頭的字符串。 變量(變量(variable):由大寫字母或下劃線():由大寫字母或下劃線(_)開頭。)開頭。 結(jié)構(gòu)(結(jié)構(gòu)(structure):在以后的章節(jié)介紹。):在以后的章節(jié)介紹。 21:0233原子通常是字母和數(shù)字組成,開頭的字符必須是小寫字母。例如:原子通常是字母和數(shù)字組成,開頭的字符必須是小寫字母。例如:hello twoWo

28、rdsTogether x14 為了方便閱讀,可以使用下劃線把單詞分開。例如:為了方便閱讀,可以使用下劃線把單詞分開。例如:a_long_atom_name z_23 下面的是不合法的原子:下面的是不合法的原子: 123nodigitsatbeginning Nocapsfirst 下劃線不能放在最前面下劃線不能放在最前面使用單引號擴(kuò)起來的字符集都是合法的原子:使用單引號擴(kuò)起來的字符集都是合法的原子:this-hyphen-is-okUpperCaseembedded blanks下面的由符號組成的也是合法的原子:下面的由符號組成的也是合法的原子:,+ Prolog入門之入門之-1.事實(shí)事實(shí)2

29、1:0234變量和原子相似,變量和原子相似, 但是開頭字符是大寫字母或是下劃線。例如:但是開頭字符是大寫字母或是下劃線。例如:X Input_List下劃線開頭的都是變量下劃線開頭的都是變量 Prolog入門之入門之-1.事實(shí)事實(shí)21:0235 用一階謂詞來表達(dá)事實(shí):用一階謂詞來表達(dá)事實(shí): prince(charles).查爾斯是王子。查爾斯是王子。 married(jane,david).珍妮和戴維結(jié)婚了。珍妮和戴維結(jié)婚了。 drinks(joyce,coffee).喬伊斯喝咖啡。喬伊斯喝咖啡。 drive(john,pauline,bmw). 約翰和波琳駕駛寶馬車。約翰和波琳駕駛寶馬車。

30、bites(dog,man).狗咬人。狗咬人。 bites(man,dog).人咬狗。人咬狗。Prolog入門之入門之-1.事實(shí)事實(shí)21:0236 我們可以用一階謂詞來建立所需要的知識庫。我們可以用一階謂詞來建立所需要的知識庫。例一例一人們在一個聚會上的穿戴:人們在一個聚會上的穿戴:wears(mary,dress).wears(tina,trousers).wears(fred,suit).wears(terry,suit).wears(tina,red_blouse).wears(fred,white_shirt).wears(terry,blue_shirt).Prolog入門之入門之-

31、1.事實(shí)事實(shí)21:0237從定義基本的事實(shí)開始,這些事實(shí)是本游戲的基本的數(shù)據(jù)庫。它們包括:從定義基本的事實(shí)開始,這些事實(shí)是本游戲的基本的數(shù)據(jù)庫。它們包括:房間和它們的聯(lián)系房間和它們的聯(lián)系物體和它們的位置物體和它們的位置物體的屬性物體的屬性玩家在游戲開始時的位置玩家在游戲開始時的位置 Prolog入門之入門之-1.事實(shí)事實(shí)尋找尋找Nani游戲游戲21:0238首先我們使用首先我們使用room謂詞定義房間,一共有五條子句,它們都是謂詞定義房間,一共有五條子句,它們都是事實(shí)。事實(shí)。room(kitchen). room(office). room(hall). room(dining room).

32、room(cellar). Prolog入門之入門之-1.事實(shí)事實(shí)尋找尋找Nani游戲游戲21:0239 我們使用具有兩個參數(shù)的謂詞來定義物體的位置。第一個參我們使用具有兩個參數(shù)的謂詞來定義物體的位置。第一個參數(shù)代表物體的名稱,第二個參數(shù)表示物體的位置。謂詞數(shù)代表物體的名稱,第二個參數(shù)表示物體的位置。謂詞location的意思是的意思是“第一個參數(shù)所代表的物體位于第二個參第一個參數(shù)所代表的物體位于第二個參數(shù)所代表的物體中數(shù)所代表的物體中”。開始時,我們加入如下的物體:。開始時,我們加入如下的物體:location(desk, office).location(apple, kitchen).l

33、ocation(flashlight, desk).location(washing machine, cellar). location(nani, washing machine).location(broccoli, kitchen). location(crackers, kitchen).location(computer, office). 注意:我們定義的那些符號,例如:注意:我們定義的那些符號,例如:kitchen、desk等對于我們是有意義的,等對于我們是有意義的,可是它們對于可是它們對于Prolog是沒有任何意義的,完全可以使用任何符號來表示房是沒有任何意義的,完全可以使用

34、任何符號來表示房間的名稱。間的名稱。 尋找尋找Nani游戲游戲Prolog入門之入門之-1.事實(shí)事實(shí)21:0240 下面我們來表達(dá)房間的聯(lián)系。使用下面我們來表達(dá)房間的聯(lián)系。使用door來表示兩個房間有門來表示兩個房間有門相連,相連,door(office, hall).但是,我們想要表達(dá)的意思是但是,我們想要表達(dá)的意思是office和和hall之間有一個門,可之間有一個門,可是由于是由于Prolog能夠區(qū)分能夠區(qū)分door(office, hall)和和door(hall, office),所以如果我們想要表達(dá)一種雙向的聯(lián)系,就必須把,所以如果我們想要表達(dá)一種雙向的聯(lián)系,就必須把每種聯(lián)系都定義

35、一遍。每種聯(lián)系都定義一遍。 door(office, hall). door(hall, office). 在這里,只定義單向的門:在這里,只定義單向的門:door(office, hall). door(kitchen, office).door(hall, dining room). door(kitchen, cellar).door(dining room, kitchen).尋找尋找Nani游戲游戲Prolog入門之入門之-1.事實(shí)事實(shí)21:0241 下面定義某些物體的屬性,下面定義某些物體的屬性,edible(apple). edible(crackers). tastes_yuc

36、ky(broccoli). 最后,定義手電筒(由于是晚上,玩家必須找到手電筒,并最后,定義手電筒(由于是晚上,玩家必須找到手電筒,并打開它才能到那些關(guān)了燈的房間)的狀態(tài)和玩家的初始位置。打開它才能到那些關(guān)了燈的房間)的狀態(tài)和玩家的初始位置。turned_off(flashlight).here(kitchen).Prolog入門之入門之-1.事實(shí)事實(shí)尋找尋找Nani游戲游戲21:0242 現(xiàn)在我們的數(shù)據(jù)庫中已經(jīng)有了一些事實(shí),使用現(xiàn)在我們的數(shù)據(jù)庫中已經(jīng)有了一些事實(shí),使用Prolog的解釋的解釋器調(diào)入此程序后,我們就可以對這些事實(shí)進(jìn)行查詢了。器調(diào)入此程序后,我們就可以對這些事實(shí)進(jìn)行查詢了。 Pro

37、log的查詢工作是靠模式匹配完成的。查詢的模板叫做目的查詢工作是靠模式匹配完成的。查詢的模板叫做目標(biāo)標(biāo)(goal)。如果有某個事實(shí)與目標(biāo)匹配,那么查詢就成功了,。如果有某個事實(shí)與目標(biāo)匹配,那么查詢就成功了,Prolog的解釋器會回顯的解釋器會回顯yes.。如果沒有匹配的事實(shí),查詢。如果沒有匹配的事實(shí),查詢就失敗了,解釋器回顯就失敗了,解釋器回顯no.。 我們把我們把Prolog的模式匹配工作叫做聯(lián)合的模式匹配工作叫做聯(lián)合(unification)。當(dāng)數(shù)。當(dāng)數(shù)據(jù)庫中只包括事實(shí)時,以下三個條件是使聯(lián)合成功的必要條據(jù)庫中只包括事實(shí)時,以下三個條件是使聯(lián)合成功的必要條件。件。 目標(biāo)謂詞名與數(shù)據(jù)庫中的某

38、個謂詞名相同。目標(biāo)謂詞名與數(shù)據(jù)庫中的某個謂詞名相同。 這兩個謂詞的參數(shù)數(shù)目相同。這兩個謂詞的參數(shù)數(shù)目相同。 所有的參數(shù)也相同。所有的參數(shù)也相同。Prolog入門之入門之-2.簡單查詢簡單查詢21:0243例一例一人們在一個聚會上的穿戴:人們在一個聚會上的穿戴:wears(mary,dress).wears(tina,trousers).wears(fred,suit).wears(terry,suit).wears(tina,red_blouse).wears(fred,white_shirt).wears(terry,blue_shirt). 如問:瑪麗穿的是套裝嗎?進(jìn)入詢問狀態(tài)后,可以打入

39、如問:瑪麗穿的是套裝嗎?進(jìn)入詢問狀態(tài)后,可以打入-?wears(mary,dress).Prolog入門之入門之-2.簡單查詢簡單查詢21:0244為回答這一問題,為回答這一問題,Prolog會去搜索數(shù)據(jù)庫,查找與這一問題會去搜索數(shù)據(jù)庫,查找與這一問題相匹配的事實(shí)。如果符合前述匹配的條件,那么相匹配的事實(shí)。如果符合前述匹配的條件,那么Prolog就會就會顯示顯示“yes.” 如問:瑪麗是否穿一雙綠色的鞋子?如問:瑪麗是否穿一雙綠色的鞋子?-wears(mary,green_shoes).由于找不到相匹配的事實(shí),由于找不到相匹配的事實(shí),Prolog會顯示會顯示“no.”給出否定的給出否定的回答。

40、但這個回答并不是說瑪麗穿的不是綠色的鞋子,而只是回答。但這個回答并不是說瑪麗穿的不是綠色的鞋子,而只是告訴我們:數(shù)據(jù)庫中沒有這個信息。告訴我們:數(shù)據(jù)庫中沒有這個信息。 當(dāng)程序中某個量的值是變化的或不確定的時,就要用到變量。當(dāng)程序中某個量的值是變化的或不確定的時,就要用到變量。如問:蒂娜穿什么樣的衣服?如問:蒂娜穿什么樣的衣服?-wears(tina,Clothing). 這里這里Clothing是一個變量,變量名的第一個字符必須是大寫字母。是一個變量,變量名的第一個字符必須是大寫字母。Prolog入門之入門之-2.簡單查詢簡單查詢21:0245Prolog會在數(shù)據(jù)庫中尋找與此匹配的事實(shí),當(dāng)搜索

41、到第二個會在數(shù)據(jù)庫中尋找與此匹配的事實(shí),當(dāng)搜索到第二個事實(shí)時,就實(shí)現(xiàn)了匹配,這樣事實(shí)時,就實(shí)現(xiàn)了匹配,這樣Prolog的答復(fù)是:的答復(fù)是:Clothing=trousers 這不一定是唯一的答案,問號表示是否還需要尋找其它答這不一定是唯一的答案,問號表示是否還需要尋找其它答案。如果需要,可以接著鍵入案。如果需要,可以接著鍵入“;”,Prolog就繼續(xù)搜索。就繼續(xù)搜索。Clothing=red_blouse如果還要繼續(xù)尋找,可以再次鍵入如果還要繼續(xù)尋找,可以再次鍵入“;”,Prolog的答復(fù)為:的答復(fù)為:no.這里的這里的“no”是說明數(shù)據(jù)庫中再也找不到相匹配的事實(shí)了。是說明數(shù)據(jù)庫中再也找不到相

42、匹配的事實(shí)了。Prolog入門之入門之-2.簡單查詢簡單查詢21:0246如果不需要繼續(xù)查找,可以按回車鍵,系統(tǒng)返回詢問狀態(tài)。如果不需要繼續(xù)查找,可以按回車鍵,系統(tǒng)返回詢問狀態(tài)。?-wears(mary,Clothing).Clothing=dress?yes.?-Prolog入門之入門之-2.簡單查詢簡單查詢21:0247數(shù)據(jù)庫如下:數(shù)據(jù)庫如下:room(kitchen).room(office).room(hall). room(dining room).room(cellar). door(office, hall).door(kitchen, office).door(hall, di

43、ning room).door(kitchen, cellar).door(dining room, kitchen).Prolog入門之入門之-2.簡單查詢簡單查詢尋找尋找Nani游戲游戲21:0248location(desk, office).location(apple, kitchen). location(flashlight, desk). location(washing machine, cellar).location(nani, washing machine).location(broccoli, kitchen).location(crackers, kitchen)

44、.location(computer, office).edible(apple).edible(crackers).tastes_yucky(broccoli).here(kitchen). 尋找尋找Nani游戲游戲Prolog入門之入門之-2.簡單查詢簡單查詢21:0249 第一個問題是:第一個問題是:office在本游戲中是不是一個房間。在本游戲中是不是一個房間。?-room(office). yes. Prolog回答回答yes,因?yàn)樗跀?shù)據(jù)庫中找到了,因?yàn)樗跀?shù)據(jù)庫中找到了room(office).這這個事實(shí)。我們繼續(xù)問:有沒有個事實(shí)。我們繼續(xù)問:有沒有attic這個房間。這個房間。

45、?-room(attic).no. Prolog回答回答no,因?yàn)樗跀?shù)據(jù)庫中找不到,因?yàn)樗跀?shù)據(jù)庫中找不到room(attic).這個這個事實(shí)。同樣我們還可以進(jìn)行如下的詢問。事實(shí)。同樣我們還可以進(jìn)行如下的詢問。?- location(apple, kitchen).yes. ?- location(kitchen, apple).no. Prolog入門之入門之-2.簡單查詢簡單查詢21:0250 接下來:接下來:?- door(office, hall). yes. ?- door(hall, office).no. 由于我們定義的門是單方向的,所以會產(chǎn)生這樣的結(jié)果。由于我們定義的門是單方

46、向的,所以會產(chǎn)生這樣的結(jié)果。 如果需要找到所有的房間,那么:如果需要找到所有的房間,那么:?- room(X).X = kitchen ;X = office ;X = hall ; X = dining room ;X = cellar ;no. (最后的(最后的no表示找不到更多的答案了。)表示找不到更多的答案了。)Prolog入門之入門之-2.簡單查詢簡單查詢21:0251 下面我們想看看下面我們想看看kitchen中都有些什么:中都有些什么:?- location(Thing, kitchen).Thing = apple ;Thing = broccoli ; Thing = cra

47、ckers ;no. 我們還可以使用兩個變量來查詢所有的物體及其位置我們還可以使用兩個變量來查詢所有的物體及其位置:?- location(Thing, Place).Thing = desk Place = office ;Thing = applePlace = kitchen ;Thing = flashlight Place = desk ;.no Prolog入門之入門之-2.簡單查詢簡單查詢21:0252 當(dāng)當(dāng)Prolog試圖與某一個目標(biāo)匹配時,例如:試圖與某一個目標(biāo)匹配時,例如:location,它就,它就在數(shù)據(jù)庫中搜尋所有用在數(shù)據(jù)庫中搜尋所有用location定義的子句,當(dāng)找到

48、一條與定義的子句,當(dāng)找到一條與目標(biāo)匹配時,它就為這條子句作上記號。當(dāng)用戶需要更多的目標(biāo)匹配時,它就為這條子句作上記號。當(dāng)用戶需要更多的答案時,它就從那條作了記號的子句開始向下查詢。答案時,它就從那條作了記號的子句開始向下查詢。Prolog入門之入門之-2.簡單查詢簡單查詢查詢的工作原理查詢的工作原理21:0253我們來看一個例子,用戶詢問:我們來看一個例子,用戶詢問:location(X,kitchen).。Prolog找到數(shù)據(jù)庫中的第一條找到數(shù)據(jù)庫中的第一條location子句,并與目標(biāo)比較。子句,并與目標(biāo)比較。 目標(biāo)目標(biāo) location(X, kitchen) 子句子句#1 locati

49、on(desk, office) 匹配失敗,因?yàn)榈诙€參數(shù)不同,一個是匹配失敗,因?yàn)榈诙€參數(shù)不同,一個是kitchen,一個是,一個是office。Prolog入門之入門之-2.簡單查詢簡單查詢查詢的工作原理查詢的工作原理21:0254于是于是Prolog繼續(xù)比較第二個子句。繼續(xù)比較第二個子句。 目標(biāo)目標(biāo) location(X, kitchen) 子句子句#2 location(apple, kitchen) 這回匹配成功,而變量這回匹配成功,而變量X的值就被綁定成了的值就被綁定成了apple。 ?- location(X, kitchen). X = apple Prolog入門之入門之-

50、2.簡單查詢簡單查詢查詢的工作原理查詢的工作原理21:0255如果用戶輸入分號如果用戶輸入分號(;),Prolog就開始尋找其他的答案。首先它必就開始尋找其他的答案。首先它必須釋放(須釋放(unbinds)變量)變量X。然后從上一次成功的位置的下一條子。然后從上一次成功的位置的下一條子句開始繼續(xù)搜索。這個過程叫做回溯(句開始繼續(xù)搜索。這個過程叫做回溯(backtracking)。在本例)。在本例中就是第三條子句。中就是第三條子句。 目標(biāo)目標(biāo) location(X, kitchen) 子句子句#3 location(flashlight, desk) 匹配失敗,直到第六條子句時匹配又成功了匹配失

51、敗,直到第六條子句時匹配又成功了 。 目標(biāo)目標(biāo) location(X, kitchen) 子句子句#6 location(broccoli, kitchen) 結(jié)果變量結(jié)果變量X又被綁定為又被綁定為broccoli,解釋器顯示:,解釋器顯示:X = broccoli ; 再度輸入分號,再度輸入分號,X又被解放,開始新的搜索。又找到了:又被解放,開始新的搜索。又找到了:X = crackers ; 這回再沒有新的子句能夠匹配了,于是這回再沒有新的子句能夠匹配了,于是Prolog回答回答no,表示最后,表示最后一次搜索失敗了。一次搜索失敗了。no查詢的工作原理查詢的工作原理Prolog入門之入門之

52、-2.簡單查詢簡單查詢21:0256 Prolog的目標(biāo)有四個端口用來控制運(yùn)行的流程:調(diào)的目標(biāo)有四個端口用來控制運(yùn)行的流程:調(diào)用(用(call)、退出()、退出(exit)、重試()、重試(redo)以及失)以及失?。〝。╢ail)。一開始使用)。一開始使用Call端口進(jìn)入目標(biāo),如果匹端口進(jìn)入目標(biāo),如果匹配成功就到了配成功就到了exit端口,如果失敗就到了端口,如果失敗就到了fail端口,端口,如果用戶輸入分號,則又從如果用戶輸入分號,則又從redo端口進(jìn)入目標(biāo)。端口進(jìn)入目標(biāo)。 每個端口的功能如下:每個端口的功能如下: call 開始使用目標(biāo)搜尋子句。開始使用目標(biāo)搜尋子句。 exit 目標(biāo)匹配

53、成功,在成功的子句上作記號,并綁定變目標(biāo)匹配成功,在成功的子句上作記號,并綁定變量。量。 redo 試圖重新滿足目標(biāo),首先釋放變量,并從上次的記試圖重新滿足目標(biāo),首先釋放變量,并從上次的記號開始搜索。號開始搜索。 fail 表示再找不到更多的滿足目標(biāo)的子句了。表示再找不到更多的滿足目標(biāo)的子句了。 Prolog入門之入門之-2.簡單查詢簡單查詢21:0257 下面列出了調(diào)試下面列出了調(diào)試location(X,kitchen).時的情況。括號中的數(shù)時的情況。括號中的數(shù)字表示當(dāng)前正在考慮的子句。字表示當(dāng)前正在考慮的子句。?- location(X, kitchen).CALL: - location

54、(X, kitchen)EXIT:(2) location(apple, kitchen)X = apple;REDO: location(X, kitchen) EXIT:(6) location(broccoli, kitchen)X = broccoli ;REDO: location(X, kitchen)EXIT:(7) location(crackers, kitchen) X = crackers ; FAIL - location(X, kitchen)no Prolog入門之入門之-2.簡單查詢簡單查詢21:0258 我們可以把簡單的查詢連接起來,組成一些較復(fù)雜的查詢。我們可

55、以把簡單的查詢連接起來,組成一些較復(fù)雜的查詢。例如,如果我們想知道廚房里能吃的東西,就可以向例如,如果我們想知道廚房里能吃的東西,就可以向Prolog進(jìn)行如下的詢問進(jìn)行如下的詢問: ?- location(X, kitchen), edible(X). 簡單的查詢只有一個目標(biāo),而混合查詢可以把這些目標(biāo)連接簡單的查詢只有一個目標(biāo),而混合查詢可以把這些目標(biāo)連接起來,從而進(jìn)行較為復(fù)雜的查詢。上面的連接符號起來,從而進(jìn)行較為復(fù)雜的查詢。上面的連接符號,是并且是并且的意思。上面的式子用語言來描述就是的意思。上面的式子用語言來描述就是“尋找滿足條件的尋找滿足條件的X,條件是:條件是:X在廚房里,并且在廚房

56、里,并且X能吃。能吃?!鄙厦娴牟樵冎挥姓业缴厦娴牟樵冎挥姓业侥骋粋€某一個X的值,使得兩個目標(biāo)都成立時,才算查詢成功。的值,使得兩個目標(biāo)都成立時,才算查詢成功。 ?- location(X, kitchen), edible(X). X = apple ; X = crackers ; no 查詢結(jié)果中沒有查詢結(jié)果中沒有broccoli,因?yàn)槲覀儧]有把它定義為可吃的,因?yàn)槲覀儧]有把它定義為可吃的東西。東西。 Prolog入門之入門之-3.混合查詢混合查詢21:0259 上面的例子中只有一個變量,下面我們再來看一個有兩個變上面的例子中只有一個變量,下面我們再來看一個有兩個變量的例子。量的例子。?-

57、 door(kitchen, R), location(T,R).R = officeT = desk ;R = officeT = computer ;R = cellarT = washing machine ; no 上面的查詢用邏輯的語言來解釋就是:上面的查詢用邏輯的語言來解釋就是:“找房間找房間R,使得從,使得從廚房到房間廚房到房間R有門相連,并且把房間有門相連,并且把房間R中的物品中的物品T(這里是房這里是房間間R的所有物品)也找出來。的所有物品)也找出來?!盤rolog入門之入門之-3.混合查詢混合查詢21:0260Goal: door(kitchen, R), location

58、(T,R)1 CALL door(kitchen, R)1 EXIT (2) door(kitchen, office)2 CALL location(T, office)2 EXIT (1) location(desk, office)R = office T = desk ;2 REDO location(T, office)2 EXIT (8) location(computer, office)R = officeT = computer ;2 REDO location(T, office)2 FAIL location(T, office)1 REDO door(kitchen,

59、R) 1 EXIT (4) door(kitchen, cellar)2 CALL location(T, cellar)2 EXIT (4) location(washing machine, cellar)R = cellar T = washing machine ; 2 REDO location(T, cellar)2 FAIL location(T, cellar)1 REDO door(kitchen, R) 1 FAIL door(kitchen, R)no 左邊是此查詢的單步運(yùn)行過程Prolog入門之入門之-3.混合查詢混合查詢21:0261 再來看個例子。再來看個例子。例例

60、某大學(xué)學(xué)生的信息。某大學(xué)學(xué)生的信息。male(tim).male(marc).male(simon).female(louise).female(hazel).female(marie).year(tim,4).year(marc,1).year(simon,2).year(louise,3).year(hazel,1).year(marie,4).Prolog入門之入門之-3.混合查詢混合查詢62studies(tim,history).studies(marc,philosophy).studies(simon,mathematics).studies(louise,computer_sc

61、ience).studies(hazel,chemistry).studies(marie,art).age(tim,24).age(marc,18).age(simon,25).age(louise,21).age(hazel,22).age(marie,32).Prolog入門之入門之-3.混合查詢混合查詢21:0263 也許我們會向也許我們會向Prolog提問,有學(xué)歷史的男生嗎?提問,有學(xué)歷史的男生嗎??-male(X),studies(X,history). 這就是目標(biāo)的合取,也就是這就是目標(biāo)的合取,也就是Prolog必須尋找滿足兩個子目標(biāo)必須尋找滿足兩個子目標(biāo)的的X值。對于這題:值。

62、對于這題:X=tim 還可以提更復(fù)雜一些的問題,比如:在一年級中,有沒有還可以提更復(fù)雜一些的問題,比如:在一年級中,有沒有20多歲的學(xué)化學(xué)的學(xué)生?多歲的學(xué)化學(xué)的學(xué)生??-year(X,1),age(X,Y),Y20,studies(X,chemistry).X=hazelY=22 如果我們對問題中某一變量的值并不關(guān)心,可以用空變量如果我們對問題中某一變量的值并不關(guān)心,可以用空變量(_)。如問:有學(xué)哲學(xué)的男生嗎?)。如問:有學(xué)哲學(xué)的男生嗎??-male(_),studies(_,philosophy).yes.Prolog入門之入門之-3.混合查詢混合查詢64 前面介紹的程序都是由簡單的事實(shí)集組

63、成的。因此,為了回前面介紹的程序都是由簡單的事實(shí)集組成的。因此,為了回答一個問題,答一個問題,Prolog只需找到與詢問相符合的事實(shí)就可以了。只需找到與詢問相符合的事實(shí)就可以了。實(shí)際上,實(shí)際上,Prolog還有更強(qiáng)的功能,它可以利用知識庫中的規(guī)還有更強(qiáng)的功能,它可以利用知識庫中的規(guī)則進(jìn)行推理。比如:則進(jìn)行推理。比如:eats(john,Y):-food(Y),sweet(Y). 這個規(guī)則告訴我們:如果這個規(guī)則告訴我們:如果Y是一種食物(是一種食物(food),并且是甜),并且是甜的(的(sweet),則約翰(),則約翰(john)會吃)會吃Y。 上述規(guī)則由三個要素構(gòu)成:上述規(guī)則由三個要素構(gòu)成:

64、 規(guī)則頭(上例中為規(guī)則頭(上例中為eats(john,X));); 符號符號“:-”(如果);(如果); 規(guī)則體(上例中為規(guī)則體(上例中為food(Y),sweet(Y). ) 首先用規(guī)則頭與詢問進(jìn)行匹配,如果匹配成功,且構(gòu)成規(guī)則首先用規(guī)則頭與詢問進(jìn)行匹配,如果匹配成功,且構(gòu)成規(guī)則體的目標(biāo)也成功的話,則這條規(guī)則成功。體的目標(biāo)也成功的話,則這條規(guī)則成功。Prolog入門之入門之-4.規(guī)則規(guī)則21:0265 舉個例子,在尋找舉個例子,在尋找nani游戲的混合查詢中,找到能吃的東西和游戲的混合查詢中,找到能吃的東西和它所在的房間,可以使用如下的規(guī)則保存,規(guī)則名為它所在的房間,可以使用如下的規(guī)則保存,

65、規(guī)則名為where_food:where_food(X,Y) :- location(X,Y), edible(X). 用語言來描述就是用語言來描述就是“在房間在房間Y中有可食物中有可食物X的條件是:的條件是:X在在Y房房間中,并且間中,并且X可食??墒??!?我們現(xiàn)在可以直接使用此規(guī)則來找到房間中可食的物品。我們現(xiàn)在可以直接使用此規(guī)則來找到房間中可食的物品。?- where_food(X, kitchen). X = apple ;X = crackers ;no ?- where_food(Thing, dining room).no 它也可以用來判斷:它也可以用來判斷:?- where_f

66、ood(apple, kitchen).yes Prolog入門之入門之-4.規(guī)則規(guī)則66 或者通過它找出所有的可食物及其位置:或者通過它找出所有的可食物及其位置:?- where_food(Thing, Room). Thing = appleRoom = kitchen ; Thing = crackersRoom = kitchen ;no Prolog入門之入門之-4.規(guī)則規(guī)則21:0267 我們也可以用多個規(guī)則來定義一個謂詞。例如,如果想讓我們也可以用多個規(guī)則來定義一個謂詞。例如,如果想讓Prolog知道知道broccoli(椰菜)也是可食物,我們可以如下定(椰菜)也是可食物,我們可以如下定義義where_food規(guī)則:規(guī)則:where_food(X,Y) :- location(X,Y), edible(X).where_food(X,Y) :- location(X,Y), tastes_yucky(X). 在以前的事實(shí)中我們沒有把在以前的事實(shí)中我們沒有把broccoli定義為定義為edible,即沒有,即沒有edible(broccoli).這個事實(shí),所以單靠這個事實(shí),

展開閱讀全文
溫馨提示:
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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!