人工智能程序設(shè)計(jì)語(yǔ)言-2015課件_第1頁(yè)
人工智能程序設(shè)計(jì)語(yǔ)言-2015課件_第2頁(yè)
人工智能程序設(shè)計(jì)語(yǔ)言-2015課件_第3頁(yè)
人工智能程序設(shè)計(jì)語(yǔ)言-2015課件_第4頁(yè)
人工智能程序設(shè)計(jì)語(yǔ)言-2015課件_第5頁(yè)
已閱讀5頁(yè),還剩54頁(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)介

人工智能程序設(shè)計(jì)語(yǔ)言華北電力大學(xué)計(jì)算機(jī)系

11/7/20221內(nèi)容綜述函數(shù)型程序設(shè)計(jì)語(yǔ)言LISP邏輯性程序設(shè)計(jì)語(yǔ)言PROLOGPROLOG程序設(shè)計(jì)11/7/20222華北電力大學(xué)內(nèi)容綜述函數(shù)型程序設(shè)計(jì)語(yǔ)言LISP邏輯性程序設(shè)計(jì)語(yǔ)言PROLOGPROLOG程序設(shè)計(jì)11/7/20223華北電力大學(xué)綜述人工智能程序設(shè)計(jì)語(yǔ)言函數(shù)型語(yǔ)言邏輯性語(yǔ)言面向?qū)ο笳Z(yǔ)言混合型語(yǔ)言11/7/20225華北電力大學(xué)綜述-函數(shù)型語(yǔ)言函數(shù)型語(yǔ)言LISP是一種函數(shù)型程序設(shè)計(jì)語(yǔ)言。LISP程序由一組函數(shù)組成,程序的執(zhí)行過(guò)程就是一系列的函數(shù)調(diào)用和求值過(guò)程。但LISP還不是純函數(shù)型語(yǔ)言,準(zhǔn)確地講,它是基于λ--函數(shù)的語(yǔ)言。除LISP外,20世紀(jì)70年代J.Backus還提出了一種稱(chēng)為FP的所謂純函數(shù)型程序設(shè)計(jì)語(yǔ)言。但該語(yǔ)言現(xiàn)在還限于理論研究,實(shí)現(xiàn)上還存在一定困難。11/7/20226華北電力大學(xué)綜述-邏輯型語(yǔ)言邏輯型語(yǔ)言邏輯型程序設(shè)計(jì)語(yǔ)言起源于PROLOG(PROgramminginLOGic)。PROLOG語(yǔ)言首先由法國(guó)馬塞大學(xué)的Colmerauer和它的研究小組于1972年研制成功,后來(lái)在歐洲得到進(jìn)一步發(fā)展。特別是1981年日本宣布要以PROLOG作為他們正在研制的新一代計(jì)算機(jī)——智能計(jì)算機(jī)的核心語(yǔ)言,更使PROLOG舉世矚目,迅速風(fēng)靡世界。11/7/20227華北電力大學(xué)綜述-邏輯型語(yǔ)言現(xiàn)在PROLOG幾乎在人工智能的所有領(lǐng)域都獲得了應(yīng)用,成為與LISP并駕齊驅(qū)的甚至更加流行的智能程序設(shè)計(jì)語(yǔ)言。由于PROLOG語(yǔ)言是一種邏輯型程序設(shè)計(jì)語(yǔ)言,因此用它編寫(xiě)的程序也就是邏輯程序,即在PROLOG程序中一般不需告訴計(jì)算機(jī)“怎么做”,而只需告訴它“做什么”。因此,PROLOG亦屬陳述性語(yǔ)言。與通常的過(guò)程性程序設(shè)計(jì)語(yǔ)言相比,PROLOG是更高級(jí)的語(yǔ)言。11/7/20228華北電力大學(xué)綜述-混合型語(yǔ)言混合型語(yǔ)言1.函數(shù)型與邏輯型相結(jié)合的語(yǔ)言

函數(shù)型與邏輯型語(yǔ)言的結(jié)合方式有耦合型和統(tǒng)一型兩類(lèi)。統(tǒng)一型又可分為具有歸結(jié)語(yǔ)義的函數(shù)型語(yǔ)言和集成式語(yǔ)言兩個(gè)子類(lèi)。耦合型語(yǔ)言意為將具有歸約語(yǔ)義的函數(shù)型語(yǔ)言和具有歸結(jié)語(yǔ)義的邏輯型語(yǔ)言組合在一起,并在二者之間提供一個(gè)接口而形成的一種混合型語(yǔ)言。其典型代表有:11/7/202210華北電力大學(xué)綜述-混合型語(yǔ)言2.函數(shù)型與面向?qū)ο笙嘟Y(jié)合的語(yǔ)言

在LISP語(yǔ)言的基礎(chǔ)上再擴(kuò)充面向?qū)ο髾C(jī)制而產(chǎn)生的語(yǔ)言,稱(chēng)為函數(shù)型的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言(亦稱(chēng)為面向?qū)ο蟮腖ISP)。這種語(yǔ)言現(xiàn)已成為一個(gè)家族,其中比較著名的有:(1)Flavors由MIT的LispMachine小組于1979年研制而成,它的基語(yǔ)言是SymbolicsCommonLISP。(2)LOOPS(Lisp-Object-OrientedProgrammingSystem)。它是在InterLisp-D環(huán)境上實(shí)現(xiàn)的基于LISP的OOP語(yǔ)言,由Xerox公司于1983年推出。11/7/202212華北電力大學(xué)綜述-混合型語(yǔ)言3.邏輯型與面向?qū)ο笙嘟Y(jié)合的語(yǔ)言

這類(lèi)語(yǔ)言著名的有:(1)SPOOL。日本IBM分部于1985年推出的以面向?qū)ο笏枷霐U(kuò)充的PROLOG語(yǔ)言。(2)Orient84K。Keio大學(xué)于1984年發(fā)表的基于PROLOG和Smalltalk的并行執(zhí)行語(yǔ)言。(3)Vulan。一種面向?qū)ο蟮倪壿嬓驼Z(yǔ)言。11/7/202214華北電力大學(xué)內(nèi)容綜述函數(shù)型程序設(shè)計(jì)語(yǔ)言LISP邏輯性程序設(shè)計(jì)語(yǔ)言PROLOGPROLOG程序設(shè)計(jì)11/7/202215華北電力大學(xué)函數(shù)型程序設(shè)計(jì)語(yǔ)言LISPLISP是第一個(gè)人工智能程序設(shè)計(jì)語(yǔ)言LIStProcessing,表處理語(yǔ)言1960年由MIT的麥卡錫和他的研究小組設(shè)計(jì),擅長(zhǎng)表處理,即符號(hào)處理許多人工智能系統(tǒng)用LISP語(yǔ)言編寫(xiě)LISP被譽(yù)為人工智能的數(shù)學(xué),是人工智能研究和開(kāi)發(fā)的主要工具11/7/202216華北電力大學(xué)

函數(shù)型程序設(shè)計(jì)語(yǔ)言LISP

LISP語(yǔ)言的主要特點(diǎn):LISP程序由一組函數(shù)組成,程序的執(zhí)行過(guò)程是函數(shù)的調(diào)用過(guò)程程序和數(shù)據(jù)在形式上是相同的,即都是符號(hào)表達(dá)式,簡(jiǎn)稱(chēng)為S─表達(dá)式遞歸是LISP語(yǔ)言的主要控制結(jié)構(gòu)程序以交互方式運(yùn)行11/7/202217華北電力大學(xué)LISP的程序結(jié)構(gòu)LISP的程序一般由函數(shù)的定義和函數(shù)的調(diào)用兩部分組成。其一般格式為:(DEFUN(<函數(shù)名>(<形參表>)<函數(shù)體>)(<函數(shù)名>(<形參表>)<函數(shù)體>)

…(<函數(shù)名>(<形參表>)<函數(shù)體>))

(<函數(shù)名><實(shí)參表>)(<函數(shù)名><實(shí)參表>)…(<函數(shù)名><實(shí)參表>)“DEFUN”是定義函數(shù)的關(guān)鍵字“函數(shù)名”可以是系統(tǒng)的內(nèi)部函數(shù)(名),也可以是用戶用DEFUN定義的函數(shù)(名)11/7/202218華北電力大學(xué)LISP的基本函數(shù)LISP的函數(shù)一律使用前綴表示方式,分為內(nèi)部函數(shù)(基本或系統(tǒng)函數(shù))和用戶自定義函數(shù)兩類(lèi)基本函數(shù)的種類(lèi)有十多個(gè),僅給出主要的幾類(lèi)表處理函數(shù)算數(shù)函數(shù)求值與賦值函數(shù)謂詞函數(shù)條件函數(shù)11/7/202220華北電力大學(xué)表處理函數(shù)表處理是LISP的主要特色,下面僅給出最常用的幾個(gè):1)CAR函數(shù) 功能 取出表中的表頭。 如 CAR′(LISPLanguageProgram)) 返回值 LISP2)CDR函數(shù)功能 取出表中的表尾如 (CDR′(LISPLanguageProgram))返回值(LanguageProgram)11/7/202221華北電力大學(xué)算術(shù)函數(shù)LISP的算術(shù)表達(dá)式也是用函數(shù)表示的,稱(chēng)為算術(shù)函數(shù)舉例說(shuō)明(+25)表示2+5,返回值為7(-(*48)(/105))表示4×8-10/5,返回值為3011/7/202223華北電力大學(xué)求值與賦值函數(shù)撇號(hào)′是禁止求值函數(shù)QUOTE的簡(jiǎn)寫(xiě)形式賦值函數(shù)有多個(gè)SET函數(shù)是最基本的一個(gè)功能 把S─表達(dá)式賦給變量例如:(SET′X′8);X得到值8(SET′Y′(abc));Y得到值(abc)(SET′Z(CDRY);Z得到值(bc)11/7/202224華北電力大學(xué)謂詞函數(shù)

(2)相等謂詞EQUAL功能 判斷兩個(gè)參數(shù)是否邏輯相等例如:(EQUAL′a′a);返回T(EQUAL′(ab)′(ac));返回NIL

(3)判空表函數(shù)NULL功能 判斷參數(shù)是否為空表,是則返回T,否則返回NIL11/7/202226華北電力大學(xué)條件函數(shù)條件函數(shù)類(lèi)似于分支語(yǔ)句,其作用是控制程序的流程

格式 (COND(P1e1) (P2e2) … (Pnen))其中Pi(i=1,...,n)為謂詞,ei(i=1,...,n)為一個(gè)或多個(gè)S─表達(dá)式

功能 如果P1為真,則COND函數(shù)的值為e1。否則,判斷P2,……直到某個(gè)Pi真為止,然后將對(duì)應(yīng)的ei作為函數(shù)值。若沒(méi)有一個(gè)Pi的值為非NIL,則COND的返回值為NIL。特別地,Pi也可以為邏輯常量T,這時(shí)則對(duì)其對(duì)應(yīng)的各表達(dá)式求值,并把最后一個(gè)表達(dá)式的值作為COND的返回值

11/7/202227華北電力大學(xué)條件函數(shù)例如:(COND((NULLx)0)((ATOMx)1)((LISTPx)(LENGTHx)))其語(yǔ)義是,若x的值為NIL,則COND的返回值為0;若x為原子,則COND的返回值為1;若x的值為表,則COND的返回值為表的長(zhǎng)度11/7/202228華北電力大學(xué)例定義求N!的LISP函數(shù)階乘的公式是n!=n×(n-1)!1!=10!=1其LISP函數(shù)如下:(DEFUNN!(n)(COND((=n0)1)((=n1)1)(T(*n(N!(-n1))))))該函數(shù)的最后一行中又調(diào)用了它自己→這個(gè)函數(shù)N!是遞歸定義的11/7/202230華北電力大學(xué)例HANOI(DEFUNHANOI(abcn)

當(dāng)只有一個(gè)盤(pán)子時(shí),直接將a上的盤(pán)子移動(dòng)到c上

(COND((=n1)(MOVE-DISKac))

其他情況,通過(guò)遞歸,先將柱a上的n-1個(gè)盤(pán)子通過(guò)柱c移到柱b上

(T(HANOIacb(-n1))

再將柱a上的一個(gè)盤(pán)子移動(dòng)到柱c上

(MOVE-DISKac)

最后再通過(guò)遞歸,將柱b上的n-1個(gè)盤(pán)子通過(guò)柱a移動(dòng)到柱c上 (HANOIbac(-n1)))))函數(shù)MOVE-DISK起顯示的作用,表示從柱from到柱to移動(dòng)了一個(gè)盤(pán)子

(DEFUNMOVE-DISK(fromto)

TERPRI是回車(chē)換行函數(shù),PRINC是顯示參數(shù)的函數(shù) (TERPRI)

(PRINC”MoveDiskFrom”)

(PRINCfrom)

(PRINC”To”)

(PRINCto))

11/7/202231華北電力大學(xué)內(nèi)容綜述函數(shù)型程序設(shè)計(jì)語(yǔ)言LISP邏輯性程序設(shè)計(jì)語(yǔ)言PROLOGPROLOG程序設(shè)計(jì)11/7/202232華北電力大學(xué)邏輯型程序設(shè)計(jì)語(yǔ)言PROLOG1972年,法國(guó)馬賽大學(xué)的Alain.Colmerauer提出了Prolog的雛型1975年,Prolog被用于問(wèn)題求解系統(tǒng),此后在許多領(lǐng)域獲得了應(yīng)用,如關(guān)系數(shù)據(jù)庫(kù)、定理證明、智能問(wèn)題求解、計(jì)算機(jī)輔助設(shè)計(jì)、規(guī)劃生成等領(lǐng)域Prolog語(yǔ)言是以一階謂詞邏輯的Horn子句集為語(yǔ)法,以Robinson的消解原理為工具,加上深度優(yōu)先的控制策略而形成的人工智能通用程序設(shè)計(jì)語(yǔ)言11/7/202233華北電力大學(xué)Horn邏輯文字:原子公式(正文字)或原子公式的否定(負(fù)文字)P,Q,?R子句:若干文字的析取 ?P∨Q∨R在數(shù)理邏輯中,霍恩子句(HornClause)是帶有最多一個(gè)肯定文字的子句(文字的析取)Horn子句:子句L1∨L2∨…∨Ln中如果至多只含一個(gè)正文字,那么該子句稱(chēng)為Horn子句。Horn子句P∨?Q1∨?Q2∨…∨?Qn通常表示為:PQ1,Q2,…,Qn11/7/202234華北電力大學(xué)Horn邏輯Horn子句的類(lèi)型:過(guò)程:PQ1,Q2,…,Qn事實(shí):P目標(biāo):Q1,Q2,…,Qn空子句:?11/7/202235華北電力大學(xué)Horn邏輯例:過(guò)程:AT(dog,x)

AT(Zhang,x) 事實(shí):AT(Zhang,train)

目標(biāo):AT(dog,train)

首先目標(biāo)中過(guò)程調(diào)用AT(dog,train)與過(guò)程名AT(dog,x)匹配,合一為{train/x},調(diào)用過(guò)程AT(Zhang,x),從而產(chǎn)生新目標(biāo)

AT(Zhang,train),與事實(shí)匹配,產(chǎn)生目標(biāo)?。因而調(diào)用成功,輸出“是”。11/7/202236華北電力大學(xué)Prolog的基本特點(diǎn)Prolog既是一種邏輯程序設(shè)計(jì)語(yǔ)言,又是一個(gè)邏輯系統(tǒng)Prolog是一種描述性語(yǔ)言,是一種面向問(wèn)題的語(yǔ)言,只需要告訴它要做什么,即給出問(wèn)題的形式描述,而不需要知道應(yīng)該如何做Prolog完全依靠匹配、回溯來(lái)進(jìn)行搜索Prolog有很強(qiáng)的描述能力11/7/202237華北電力大學(xué)內(nèi)容綜述函數(shù)型程序設(shè)計(jì)語(yǔ)言LISP邏輯性程序設(shè)計(jì)語(yǔ)言PROLOGPROLOG程序設(shè)計(jì)PROLOG語(yǔ)句PROLOG程序PROLOG程序的運(yùn)行機(jī)理其它11/7/202238華北電力大學(xué)PROLOG的語(yǔ)句PROLOG語(yǔ)言只有三種語(yǔ)句,分別為:事實(shí)(fact)規(guī)則(rule)問(wèn)題(question)

11/7/202239華北電力大學(xué)事實(shí)(fact)格式 <謂詞名>(<項(xiàng)表>).謂詞名是以小寫(xiě)英文字母打頭的字母、數(shù)字、下劃線等組成的字符串項(xiàng)表是以逗號(hào)隔開(kāi)的項(xiàng)序列例如:student(john).like(mary,music).功能一般表示對(duì)象的性質(zhì)或關(guān)系

作為特殊情形,事實(shí)也可以只有謂詞名而無(wú)參量例如:abc.repeat.11/7/202240華北電力大學(xué)規(guī)則(rule)格式<謂詞名>(<項(xiàng)表>):-<謂詞名>(<項(xiàng)表>){,<謂詞名>(<項(xiàng)表>)}.“:-”號(hào)表示“if”左部的謂詞是規(guī)則的結(jié)論(亦稱(chēng)為頭)右部的謂詞是規(guī)則的前提(亦稱(chēng)為體){}表示零次或多次重復(fù)逗號(hào)表示and(邏輯與)例如:bird(X):-animal(X),has(X,feather).grandfather(X,Y):-father(X,Z),father(Z,Y).功能一般表示對(duì)象間的因果關(guān)系、蘊(yùn)含關(guān)系或?qū)?yīng)關(guān)系作為特殊情形,規(guī)則中的謂詞也可以只有謂詞名而無(wú)參量例如:run:-start,step1(X),step2(X),end.11/7/202241華北電力大學(xué)問(wèn)題(question)格式?-<謂詞名>(<項(xiàng)表>){,<謂詞名>(<項(xiàng)表>)}.例如:?-student(john).?-like(mary,X).功能問(wèn)題表示用戶的詢問(wèn),是程序運(yùn)行的目標(biāo)11/7/202242華北電力大學(xué)Prolog的一些內(nèi)建謂詞Prolog提供了一些有用的內(nèi)建謂詞(Built-inPredicates)內(nèi)建謂詞和用戶定義謂詞使用方式類(lèi)似常用內(nèi)建謂詞等價(jià)謂詞:=永真和永假:true;fail載入程序文件:consult/1終端輸出write/1;nl/011/7/202243華北電力大學(xué)PROLOG程序PROLOG程序一般由一組事實(shí)、規(guī)則和問(wèn)題組成。問(wèn)題是程序執(zhí)行的起點(diǎn),稱(chēng)為程序的目標(biāo)。例如下面就是一個(gè)PROLOG程序。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).四條事實(shí)兩條規(guī)則一個(gè)問(wèn)題11/7/202244華北電力大學(xué)PROLOG程序的運(yùn)行機(jī)理PROLOG程序的運(yùn)行是從目標(biāo)出發(fā),并不斷進(jìn)行匹配、合一、歸結(jié),有時(shí)還要回溯,直到目標(biāo)被完全滿足或不能滿足時(shí)為止匹配?合一?回溯?11/7/202245華北電力大學(xué)PROLOG程序的運(yùn)行機(jī)理自由變量與約束變量PROLOG中稱(chēng)無(wú)值的變量為自由變量,有值的變量為約束變量一個(gè)變量取了某值就說(shuō)該變量約束于某值或者說(shuō)該變量被某值所約束或者說(shuō)該變量被某值實(shí)例化了11/7/202246華北電力大學(xué)PROLOG程序的運(yùn)行機(jī)理匹配合一:指兩個(gè)謂詞的名相同,參量項(xiàng)的個(gè)數(shù)相同,參量類(lèi)型對(duì)應(yīng)相同,并且對(duì)應(yīng)參量項(xiàng)滿足下列條件之一(1)如果兩個(gè)都是常量,則必須完全相同(2)如果兩個(gè)都是約束變量,則兩個(gè)約束值必須相同(3)如果其中一個(gè)是常量,一個(gè)是約束變量,則約束值與常量必須相同(4)至少有一個(gè)是自由變量例如:下面的兩個(gè)謂詞

pre1(“ob1”,“ob2”,Z).pre1("ob1",X,Y).只有當(dāng)變量X被約束為"ob2",且Y、Z的約束值相同或者至少有一個(gè)是自由變量時(shí),它們才是匹配合一的11/7/202247華北電力大學(xué)PROLOG程序的運(yùn)行機(jī)理回溯在程序運(yùn)行期間,當(dāng)某一個(gè)子目標(biāo)不能滿足(即謂詞匹配失敗)時(shí),控制就返回到前一個(gè)已經(jīng)滿足的子目標(biāo)(如果存在的話),并撤消其有關(guān)變量的約束值,然后再使其重新滿足。成功后,再繼續(xù)滿足原子目標(biāo)。如果失敗的子目標(biāo)前再無(wú)子目標(biāo),則控制就返回到該子目標(biāo)的上一級(jí)目標(biāo)(即該子目標(biāo)謂詞所在規(guī)則的頭部)使它重新匹配。回溯也是PROLOG的一個(gè)重要機(jī)制11/7/202248華北電力大學(xué)設(shè)所給的詢問(wèn)是?-friend(john,Y).(john和誰(shuí)是朋友?)則求解目標(biāo)為friend(john,Y).這時(shí),系統(tǒng)對(duì)程序進(jìn)行掃描,尋找能與目標(biāo)謂詞匹配合一的事實(shí)或規(guī)則頭部。顯然,程序中前面的四條事實(shí)均不能與目標(biāo)匹配,而第五個(gè)語(yǔ)句的左端即規(guī)則PROLOG程序的運(yùn)行過(guò)程11/7/202249華北電力大學(xué)friend(john,X):-likes(X,reading),likes(X,music).頭部可與目標(biāo)謂詞匹配合一。但由于這個(gè)語(yǔ)句又是一個(gè)規(guī)則,所以其結(jié)論要成立則必須其前提全部成立。于是,對(duì)原目標(biāo)的求解就轉(zhuǎn)化為對(duì)新目標(biāo)likes(X,reading),likes(X,music).的求解。這實(shí)際是經(jīng)歸結(jié),規(guī)則頭部被消去,而目標(biāo)子句變?yōu)?-likes(X,reading),likes(X,music).現(xiàn)在依次對(duì)子目標(biāo)likes(X,reading)和likes(X,music)求解PROLOG程序的運(yùn)行過(guò)程11/7/202250華北電力大學(xué)子目標(biāo)的求解過(guò)程與主目標(biāo)完全一樣,也是從頭對(duì)程序進(jìn)行掃描,不斷進(jìn)行測(cè)試和匹配合一等,直到匹配成功或掃描完整個(gè)程序?yàn)橹???梢钥闯?,?duì)第一個(gè)子目標(biāo)like(X,reading)的求解因無(wú)可匹配的事實(shí)和規(guī)則而立即失敗,進(jìn)而導(dǎo)致規(guī)則friend(john,X):-likes(X,reading),likes(X,music).的整體失敗。于是,剛才的子目標(biāo)likes(X,reading)和likes(X,music)PROLOG程序的運(yùn)行過(guò)程11/7/202251華北電力大學(xué)被撤消,系統(tǒng)又回溯到原目標(biāo)friend(john,X)這時(shí),系統(tǒng)從該目標(biāo)剛才的匹配語(yǔ)句處(即第五句)向下繼續(xù)掃描程序中的子句,試圖重新使原目標(biāo)匹配,結(jié)果發(fā)現(xiàn)第六條語(yǔ)句的左部,即規(guī)則friend(john,X):-likes(X,sports),likes(X,music).的頭部可與目標(biāo)為謂詞匹配。但由于這個(gè)語(yǔ)句又是一個(gè)規(guī)則,于是,這時(shí)對(duì)原目標(biāo)的求解,就又轉(zhuǎn)化為依次對(duì)子目標(biāo)likes(X,sports)和likes(X,music)PROLOG程序的運(yùn)行過(guò)程11/7/202252華北電力大學(xué)的求解。這次子目標(biāo)likes(X,sports)與程序中的事實(shí)立即匹配成功,且變量X被約束為bell。于是,系統(tǒng)便接著求解第二個(gè)子目標(biāo)。由于變量X已被約束,所以這時(shí)第二個(gè)子目標(biāo)實(shí)際上已變成了likes(bell,music).由于程序中不存在事實(shí)likes(bell,music),所以該目標(biāo)的求解失敗。于是,系統(tǒng)就放棄這個(gè)子目標(biāo),并使變量X恢復(fù)為自由變量,然后回溯到第一個(gè)子目標(biāo),重新對(duì)它進(jìn)行求解。由于系統(tǒng)已經(jīng)記住了剛才已同第一子目標(biāo)謂詞匹配過(guò)的事實(shí)的位置,所以重新求解時(shí),便從下一個(gè)事實(shí)開(kāi)始測(cè)試。PROLOG程序的運(yùn)行過(guò)程11/7/202253華北電力大學(xué)易見(jiàn),當(dāng)測(cè)試到程序中第三個(gè)事實(shí)時(shí),第一個(gè)子目標(biāo)便求解成功,且變量X被約束為mary。這樣,第二個(gè)子目標(biāo)也就變成了likes(mary,music).再對(duì)它進(jìn)行求解。這次很快成功。由于兩個(gè)子目標(biāo)都求解成功,所以,原目標(biāo)friend(john,Y)也成功,且變量Y被約束為mary(由Y與X的合一關(guān)系)。于是,系統(tǒng)回答:Y=mary程序運(yùn)行結(jié)束。上面只給出了問(wèn)題的一個(gè)解。如果需要和可能的話,系統(tǒng)還可把john的所有朋友都找出來(lái)。我們把上述程序的運(yùn)行過(guò)程再用示意圖描述如下:PROLOG程序的運(yùn)行過(guò)程11/7/202254華北電力大學(xué)圖PROLOG程序運(yùn)行機(jī)理示例PROLOG程序的運(yùn)行過(guò)程②①③④⑤⑥⑦⑧⑨11/7/202255華北電力大學(xué)循環(huán)Prolog可以實(shí)現(xiàn)計(jì)數(shù)循環(huán)。例:student(1,'張三',90.2).student(2,'李四',96.5).student(3,'王五',96.4).print:-student(Number,Name,Score),write(Number),write(Name),write(Score),nl,Number=3.print2:-student(Number,Name,Score),write(Number),write(Name),write(Score),nl,Number=2.Prolog可以實(shí)現(xiàn)不計(jì)數(shù)循環(huán)(Do循環(huán))print1:-student(Number,Name,Score),write(Number),write(Name),write(Score),nl,fail.11/7/202256華北電力大學(xué)表處理與遞歸表是有若干元素的有序序列,表中元素也可以為表PROLOG中采用一對(duì)方括號(hào)[]把表元素括起來(lái),每個(gè)元素間用逗號(hào)或空格分開(kāi),例如:

[m,n,d,f]在PROLOG內(nèi)引入“|”符號(hào),如[H|T]表示一個(gè)以H為首,以T為尾的表例如表[m,n,d,f]中,表頭為m表尾為[n,d,f][apple,orange,banana]apple[orange,banana][[a,b],[c],[d,e]][a,b][[c],[d,e]]['prolog']'prolog'

[][]無(wú)定義無(wú)定義

11/7/202257華北電力大學(xué)表處理與遞歸例:設(shè)計(jì)一個(gè)能判斷對(duì)象X是表L的成員的程序分析:(1)如果X與L的表頭是同一個(gè)對(duì)象,則X是L的成員(2)如果X是L的表尾的成員,則X是L的成員程序:member(X,[X|Tail]).member(X,[Head|Tail]):-member(X,Tail).11/7/202258華北電力大學(xué)表處理與遞歸表的拼接程序,即把兩個(gè)表連接成一個(gè)表append([],L,L).append([H|T],L2,[H|Tn]):-append(T,L2,Tn).例::-?-append([1,2,3],[4,5],[1,2,3,4,5]).yes:-?-append([1,2,3],[4,5],[1,2,3,4,5,6]).no11/7/202259華北電力大學(xué)表處理與遞歸表的輸出 print([]). print([H|T]):-write(H),print(T).?-print([3|[4,5,6,7]]).?-print([1,2,3]).11/7/202260華北電力大學(xué)表處理與遞歸例:表的倒置 reverse([],[]). reverse([H|T],L):-reverse(T,L1),append(L1,[H],L).:-?-reverse([1,2,3],X).X=[3,2,1]11/7/202261華北電力大學(xué)截?cái)嘀钡侥壳盀橹?,我們都一直在使用Prolog內(nèi)建的回溯功能。使用此功能可以方便地寫(xiě)出結(jié)構(gòu)緊湊的謂詞來(lái)但是,并不是所有的回溯都是必須的,這時(shí)我們需要能夠人工地控制回溯過(guò)程Prolog提供了完成此功能的謂詞,叫做cut,使用符號(hào)!來(lái)表示,如果在cut處產(chǎn)生回溯,它會(huì)自動(dòng)地失敗,而不去進(jìn)行其它的選擇11/7/202262華北電力大學(xué)截?cái)唷觩(a).p(b).q(b).r

溫馨提示

  • 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)論