版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
人工智能程序設(shè)計語言2023/10/19華北電力大學(xué)2內(nèi)容綜述函數(shù)型程序設(shè)計語言LISP邏輯性程序設(shè)計語言PROLOGPROLOG程序設(shè)計2023/10/19華北電力大學(xué)3內(nèi)容綜述函數(shù)型程序設(shè)計語言LISP邏輯性程序設(shè)計語言PROLOGPROLOG程序設(shè)計2023/10/19華北電力大學(xué)4綜述人工智能所解決的問題并非一般的數(shù)值計算或數(shù)據(jù)處理問題是要實現(xiàn)對腦功能的模擬和再現(xiàn)人工智能程序面向問題面向邏輯支持知識表示能描述邏輯關(guān)系和抽象概念處理對象更多的是知識,或者說是符號常規(guī)程序設(shè)計語言受限2023/10/19華北電力大學(xué)5綜述人工智能程序設(shè)計語言函數(shù)型語言邏輯性語言面向?qū)ο笳Z言混合型語言2023/10/19華北電力大學(xué)6綜述-函數(shù)型語言函數(shù)型語言
LISP是一種函數(shù)型程序設(shè)計語言。LISP程序由一組函數(shù)組成,程序的執(zhí)行過程就是一系列的函數(shù)調(diào)用和求值過程。但LISP還不是純函數(shù)型語言,準(zhǔn)確地講,它是基于λ--函數(shù)的語言。除LISP外,20世紀(jì)70年代J.Backus還提出了一種稱為FP的所謂純函數(shù)型程序設(shè)計語言。但該語言現(xiàn)在還限于理論研究,實現(xiàn)上還存在一定困難。2023/10/19華北電力大學(xué)7綜述-邏輯型語言邏輯型語言邏輯型程序設(shè)計語言起源于PROLOG(PROgramminginLOGic)。PROLOG語言首先由法國馬塞大學(xué)的Colmerauer和它的研究小組于1972年研制成功,后來在歐洲得到進一步發(fā)展。特別是1981年日本宣布要以PROLOG作為他們正在研制的新一代計算機——智能計算機的核心語言,更使PROLOG舉世矚目,迅速風(fēng)靡世界。2023/10/19華北電力大學(xué)8綜述-邏輯型語言
現(xiàn)在PROLOG幾乎在人工智能的所有領(lǐng)域都獲得了應(yīng)用,成為與LISP并駕齊驅(qū)的甚至更加流行的智能程序設(shè)計語言。由于PROLOG語言是一種邏輯型程序設(shè)計語言,因此用它編寫的程序也就是邏輯程序,即在PROLOG程序中一般不需告訴計算機“怎么做”,而只需告訴它“做什么”。因此,PROLOG亦屬陳述性語言。與通常的過程性程序設(shè)計語言相比,PROLOG是更高級的語言。2023/10/19華北電力大學(xué)9綜述-面向?qū)ο笳Z言面向?qū)ο笳Z言
20世紀(jì)80年代以來,面向?qū)ο蟪绦蛟O(shè)計(ObjectOrientedProgramming,簡稱OOP)異軍突起,發(fā)展迅速。OOP以其信息隱蔽、封裝、繼承、多態(tài)、消息傳遞等一系列優(yōu)良機制,大大改善了軟件的復(fù)雜性、模塊性、重用性和可維護性,有望從根本上解決軟件的生產(chǎn)效率問題。另一方面,由于面向?qū)ο蟪绦蛟O(shè)計的類、對象、繼承等概念,與人工智能特別是知識表示和知識庫產(chǎn)生了天然的聯(lián)系。
2023/10/19華北電力大學(xué)10綜述-混合型語言混合型語言1.函數(shù)型與邏輯型相結(jié)合的語言
函數(shù)型與邏輯型語言的結(jié)合方式有耦合型和統(tǒng)一型兩類。統(tǒng)一型又可分為具有歸結(jié)語義的函數(shù)型語言和集成式語言兩個子類。耦合型語言意為將具有歸約語義的函數(shù)型語言和具有歸結(jié)語義的邏輯型語言組合在一起,并在二者之間提供一個接口而形成的一種混合型語言。其典型代表有:2023/10/19華北電力大學(xué)11綜述-混合型語言(1)LOGLISP。該語言在LISP的基礎(chǔ)上增加了表達(dá)合一、回溯等機制的系統(tǒng)函數(shù),從而在保持LISP特色的同時又有了邏輯程序設(shè)計能力。(2)FUNLOG。該語言在PROLOG之外又增加了函數(shù)定義機制,系統(tǒng)以歸結(jié)語義執(zhí)行PROLOG程序,以歸約語義求解函數(shù)。
(3)POPLOG。這是POP-11、PROLOG和LISP的混合型語言,三種成分各有一個增量式編譯器。具有歸結(jié)語義的函數(shù)型語言又可分為N-語言、F-語言和R-語言。2023/10/19華北電力大學(xué)12綜述-混合型語言2.函數(shù)型與面向?qū)ο笙嘟Y(jié)合的語言
在LISP語言的基礎(chǔ)上再擴充面向?qū)ο髾C制而產(chǎn)生的語言,稱為函數(shù)型的面向?qū)ο蟪绦蛟O(shè)計語言(亦稱為面向?qū)ο蟮腖ISP)。這種語言現(xiàn)已成為一個家族,其中比較著名的有:
(1)Flavors由MIT的LispMachine小組于1979年研制而成,它的基語言是SymbolicsCommonLISP。
(2)LOOPS(Lisp-Object-Oriented
ProgrammingSystem)。它是在InterLisp-D環(huán)境上實現(xiàn)的基于LISP的OOP語言,由Xerox公司于1983年推出。2023/10/19華北電力大學(xué)13綜述-混合型語言(3)CommonLoops。它是基于CommonLisp的函數(shù)型OOP語言,由Xerox公司于1985年推出。
(4)CLOS(CommonLispObjetcSystem)。它是Xerox公司于1986年推出的一個CommonLoops與NewFlavors的后繼產(chǎn)品。
(5)CommonObjects。它是由HP公司于1983~1985年實現(xiàn)的又一個基于CommonLisp的OOP語言。
(6)OBJ2也是一種面向?qū)ο蟮暮瘮?shù)型語言。2023/10/19華北電力大學(xué)14綜述-混合型語言3.邏輯型與面向?qū)ο笙嘟Y(jié)合的語言
這類語言著名的有:
(1)SPOOL。日本IBM分部于1985年推出的以面向?qū)ο笏枷霐U充的PROLOG語言。
(2)Orient84K。Keio大學(xué)于1984年發(fā)表的基于PROLOG和Smalltalk的并行執(zhí)行語言。(3)Vulan。一種面向?qū)ο蟮倪壿嬓驼Z言。2023/10/19華北電力大學(xué)15內(nèi)容綜述函數(shù)型程序設(shè)計語言LISP邏輯性程序設(shè)計語言PROLOGPROLOG程序設(shè)計2023/10/19華北電力大學(xué)16函數(shù)型程序設(shè)計語言LISPLISP是第一個人工智能程序設(shè)計語言LIStProcessing,表處理語言1960年由MIT的麥卡錫和他的研究小組設(shè)計,擅長表處理,即符號處理許多人工智能系統(tǒng)用LISP語言編寫LISP被譽為人工智能的數(shù)學(xué),是人工智能研究和開發(fā)的主要工具2023/10/19華北電力大學(xué)17
函數(shù)型程序設(shè)計語言LISP
LISP語言的主要特點:LISP程序由一組函數(shù)組成,程序的執(zhí)行過程是函數(shù)的調(diào)用過程程序和數(shù)據(jù)在形式上是相同的,即都是符號表達(dá)式,簡稱為S─表達(dá)式遞歸是LISP語言的主要控制結(jié)構(gòu)程序以交互方式運行2023/10/19華北電力大學(xué)18LISP的程序結(jié)構(gòu)LISP的程序一般由函數(shù)的定義和函數(shù)的調(diào)用兩部分組成。其一般格式為:
(DEFUN(<函數(shù)名>(<形參表>)<函數(shù)體>)(<函數(shù)名>(<形參表>)<函數(shù)體>)
…(<函數(shù)名>(<形參表>)<函數(shù)體>))
(<函數(shù)名><實參表>)(<函數(shù)名><實參表>)
…(<函數(shù)名><實參表>)“DEFUN”是定義函數(shù)的關(guān)鍵字“函數(shù)名”可以是系統(tǒng)的內(nèi)部函數(shù)(名),也可以是用戶用DEFUN定義的函數(shù)(名)2023/10/19華北電力大學(xué)19一個LISP程序(DEFUNHANOI(abcn)(COND((=n1)(MOVE-DISKac))(T(HANOIacb(-n1))(MOVE-DISKac)(HANOIbac(-n1))))
(DEFUNMOVE-DISK(fromto)(TERPRI)(PRINC″MoveDiskFrom″)(PRINCfrom)(PRINC″To″)(PRINCto))
(HANOI′a′b′c3)兩個函數(shù)前者調(diào)用后者函數(shù)調(diào)用部分只有一個函數(shù)調(diào)用2023/10/19華北電力大學(xué)20LISP的基本函數(shù)LISP的函數(shù)一律使用前綴表示方式,分為內(nèi)部函數(shù)(基本或系統(tǒng)函數(shù))和用戶自定義函數(shù)兩類基本函數(shù)的種類有十多個,僅給出主要的幾類表處理函數(shù)算數(shù)函數(shù)求值與賦值函數(shù)謂詞函數(shù)條件函數(shù)2023/10/19華北電力大學(xué)21表處理函數(shù)表處理是LISP的主要特色,下面僅給出最常用的幾個:1)CAR函數(shù) 功能 取出表中的表頭。 如 CAR′(LISPLanguageProgram))
返回值 LISP2)CDR函數(shù)功能 取出表中的表尾如 (CDR′(LISPLanguageProgram))
返回值(LanguageProgram)2023/10/19華北電力大學(xué)22表處理函數(shù)3)CONS函數(shù)
功能
將S─表達(dá)式作為表頭加到表中去如
(CONS′My′(LISPLanguageProgram))返回值
(MyLISPLanguageProgram)4)APPEND函數(shù)
功能
將n個表中的元素合并成一個新表
如
(APPEND′(TIGERLION)′(DOGCAT))
返回值
(TIGERLIONDOGCAT)5)LIST函數(shù)
功能
把n個S─表達(dá)式作為元素構(gòu)成一張新表
如
(LIST′YELLOW′RED′BLUE)
返回值
(YELLOWREDBLUE)2023/10/19華北電力大學(xué)23算術(shù)函數(shù)LISP的算術(shù)表達(dá)式也是用函數(shù)表示的,稱為算術(shù)函數(shù)舉例說明(+25)表示2+5,返回值為7(-(*48)(/105))表示4×8-10/5,返回值為302023/10/19華北電力大學(xué)24求值與賦值函數(shù)撇號′是禁止求值函數(shù)QUOTE的簡寫形式賦值函數(shù)有多個SET函數(shù)是最基本的一個功能 把S─表達(dá)式賦給變量例如:
(SET′X′8);X得到值8(SET′Y′(abc));Y得到值(abc)(SET′Z(CDRY);Z得到值(bc)2023/10/19華北電力大學(xué)25謂詞函數(shù)返回值為邏輯值真或假的函數(shù)稱為謂詞函數(shù)真和假分別用T和NIL表示謂詞函數(shù)也有多個,僅給出常用的幾個:(1)原子謂詞ATOM
功能 檢測其參數(shù)是否為原子,是則T,否則NIL
例如:
(ATOM′a);返回T (ATOM′(ab));返回NIL2023/10/19華北電力大學(xué)26謂詞函數(shù)
(2)相等謂詞EQUAL
功能 判斷兩個參數(shù)是否邏輯相等例如:
(EQUAL′a′a);返回T(EQUAL′(ab)′(ac));返回NIL
(3)判空表函數(shù)NULL
功能 判斷參數(shù)是否為空表,是則返回T,否則返回NIL2023/10/19華北電力大學(xué)27條件函數(shù)條件函數(shù)類似于分支語句,其作用是控制程序的流程
格式 (COND(P1e1) (P2e2) … (Pnen))
其中Pi(i=1,...,n)為謂詞,ei(i=1,...,n)為一個或多個S─表達(dá)式
功能 如果P1為真,則COND函數(shù)的值為e1。否則,判斷P2,……直到某個Pi真為止,然后將對應(yīng)的ei作為函數(shù)值。若沒有一個Pi的值為非NIL,則COND的返回值為NIL。特別地,Pi也可以為邏輯常量T,這時則對其對應(yīng)的各表達(dá)式求值,并把最后一個表達(dá)式的值作為COND的返回值
2023/10/19華北電力大學(xué)28條件函數(shù)例如:
(COND((NULLx)0)((ATOMx)1)((LISTPx)(LENGTHx)))
其語義是,若x的值為NIL,則COND的返回值為0;若x為原子,則COND的返回值為1;若x的值為表,則COND的返回值為表的長度2023/10/19華北電力大學(xué)29自定義函數(shù)自定義函數(shù)的格式為:
(DEFUN<函數(shù)名>(<形參表>)<函數(shù)體>)
其中函數(shù)體,又可能是用戶自定義的函數(shù)或LISP基本函數(shù)的某種組合2023/10/19華北電力大學(xué)30例定義求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)用了它自己→這個函數(shù)N!是遞歸定義的2023/10/19華北電力大學(xué)31例HANOI(DEFUNHANOI(abcn)
當(dāng)只有一個盤子時,直接將a上的盤子移動到c上
(COND((=n1)(MOVE-DISKac))
其他情況,通過遞歸,先將柱a上的n-1個盤子通過柱c移到柱b上
(T(HANOIacb(-n1))
再將柱a上的一個盤子移動到柱c上
(MOVE-DISKac)
最后再通過遞歸,將柱b上的n-1個盤子通過柱a移動到柱c上 (HANOIbac(-n1)))))函數(shù)MOVE-DISK起顯示的作用,表示從柱from到柱to移動了一個盤子
(DEFUNMOVE-DISK(fromto)
TERPRI是回車換行函數(shù),PRINC是顯示參數(shù)的函數(shù) (TERPRI)
(PRINC”MoveDiskFrom”)
(PRINCfrom)
(PRINC”To”)
(PRINCto))
2023/10/19華北電力大學(xué)32內(nèi)容綜述函數(shù)型程序設(shè)計語言LISP邏輯性程序設(shè)計語言PROLOGPROLOG程序設(shè)計2023/10/19華北電力大學(xué)33邏輯型程序設(shè)計語言PROLOG1972年,法國馬賽大學(xué)的Alain.Colmerauer提出了Prolog的雛型1975年,Prolog被用于問題求解系統(tǒng),此后在許多領(lǐng)域獲得了應(yīng)用,如關(guān)系數(shù)據(jù)庫、定理證明、智能問題求解、計算機輔助設(shè)計、規(guī)劃生成等領(lǐng)域Prolog語言是以一階謂詞邏輯的Horn子句集為語法,以Robinson的消解原理為工具,加上深度優(yōu)先的控制策略而形成的人工智能通用程序設(shè)計語言2023/10/19華北電力大學(xué)34Horn邏輯文字:原子公式(正文字)或原子公式的否定(負(fù)文字)P,Q,?R子句:若干文字的析取
?P∨Q∨R在數(shù)理邏輯中,霍恩子句(HornClause)是帶有最多一個肯定文字的子句(文字的析取)Horn子句:子句L1∨L2∨…∨Ln中如果至多只含一個正文字,那么該子句稱為Horn子句。
Horn子句P∨?Q1∨?Q2∨…∨?Qn通常表示為:P
Q1,Q2,…,Qn2023/10/19華北電力大學(xué)35Horn邏輯Horn子句的類型:過程:P
Q1,Q2,…,Qn事實:
P
目標(biāo):
Q1,Q2,…,Qn空子句:?2023/10/19華北電力大學(xué)36Horn邏輯例:
過程:AT(dog,x)
AT(Zhang,x)
事實:AT(Zhang,train)
目標(biāo):
AT(dog,train)
首先目標(biāo)中過程調(diào)用AT(dog,train)與過程名AT(dog,x)匹配,合一為{train/x},調(diào)用過程AT(Zhang,x),從而產(chǎn)生新目標(biāo)
AT(Zhang,train),與事實匹配,產(chǎn)生目標(biāo)?。因而調(diào)用成功,輸出“是”。2023/10/19華北電力大學(xué)37Prolog的基本特點Prolog既是一種邏輯程序設(shè)計語言,又是一個邏輯系統(tǒng)Prolog是一種描述性語言,是一種面向問題的語言,只需要告訴它要做什么,即給出問題的形式描述,而不需要知道應(yīng)該如何做Prolog完全依靠匹配、回溯來進行搜索Prolog有很強的描述能力2023/10/19華北電力大學(xué)38內(nèi)容綜述函數(shù)型程序設(shè)計語言LISP邏輯性程序設(shè)計語言PROLOGPROLOG程序設(shè)計PROLOG語句PROLOG程序PROLOG程序的運行機理其它2023/10/19華北電力大學(xué)39PROLOG的語句PROLOG語言只有三種語句,分別為:事實(fact)規(guī)則(rule)問題(question)
2023/10/19華北電力大學(xué)40事實(fact)格式 <謂詞名>(<項表>).謂詞名是以小寫英文字母打頭的字母、數(shù)字、下劃線等組成的字符串項表是以逗號隔開的項序列例如:student(john).like(mary,music).功能一般表示對象的性質(zhì)或關(guān)系
作為特殊情形,事實也可以只有謂詞名而無參量例如:abc.repeat.2023/10/19華北電力大學(xué)41規(guī)則(rule)格式<謂詞名>(<項表>):-<謂詞名>(<項表>){,<謂詞名>(<項表>)}.“:-”號表示“if”
左部的謂詞是規(guī)則的結(jié)論(亦稱為頭)右部的謂詞是規(guī)則的前提(亦稱為體){}表示零次或多次重復(fù)逗號表示and(邏輯與)例如:bird(X):-animal(X),has(X,feather).grandfather(X,Y):-father(X,Z),father(Z,Y).功能一般表示對象間的因果關(guān)系、蘊含關(guān)系或?qū)?yīng)關(guān)系作為特殊情形,規(guī)則中的謂詞也可以只有謂詞名而無參量例如:run:-start,step1(X),step2(X),end.2023/10/19華北電力大學(xué)42問題(question)格式
?-<謂詞名>(<項表>){,<謂詞名>(<項表>)}.
例如:
?-student(john).?-like(mary,X).功能問題表示用戶的詢問,是程序運行的目標(biāo)
2023/10/19華北電力大學(xué)43Prolog的一些內(nèi)建謂詞Prolog提供了一些有用的內(nèi)建謂詞(Built-inPredicates)內(nèi)建謂詞和用戶定義謂詞使用方式類似常用內(nèi)建謂詞等價謂詞:=永真和永假:true;fail載入程序文件:consult/1終端輸出write/1;nl/02023/10/19華北電力大學(xué)44PROLOG程序PROLOG程序一般由一組事實、規(guī)則和問題組成。問題是程序執(zhí)行的起點,稱為程序的目標(biāo)。例如下面就是一個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).四條事實兩條規(guī)則一個問題2023/10/19華北電力大學(xué)45PROLOG程序的運行機理PROLOG程序的運行是從目標(biāo)出發(fā),并不斷進行匹配、合一、歸結(jié),有時還要回溯,直到目標(biāo)被完全滿足或不能滿足時為止匹配?合一?回溯?2023/10/19華北電力大學(xué)46PROLOG程序的運行機理自由變量與約束變量PROLOG中稱無值的變量為自由變量,有值的變量為約束變量一個變量取了某值就說該變量約束于某值或者說該變量被某值所約束或者說該變量被某值實例化了2023/10/19華北電力大學(xué)47PROLOG程序的運行機理匹配合一:指兩個謂詞的名相同,參量項的個數(shù)相同,參量類型對應(yīng)相同,并且對應(yīng)參量項滿足下列條件之一(1)如果兩個都是常量,則必須完全相同(2)如果兩個都是約束變量,則兩個約束值必須相同(3)如果其中一個是常量,一個是約束變量,則約束值與常量必須相同(4)至少有一個是自由變量例如:下面的兩個謂詞
pre1(“ob1”,“ob2”,Z).pre1("ob1",X,Y).
只有當(dāng)變量X被約束為"ob2",且Y、Z的約束值相同或者至少有一個是自由變量時,它們才是匹配合一的2023/10/19華北電力大學(xué)48PROLOG程序的運行機理回溯在程序運行期間,當(dāng)某一個子目標(biāo)不能滿足(即謂詞匹配失?。r,控制就返回到前一個已經(jīng)滿足的子目標(biāo)(如果存在的話),并撤消其有關(guān)變量的約束值,然后再使其重新滿足。成功后,再繼續(xù)滿足原子目標(biāo)。如果失敗的子目標(biāo)前再無子目標(biāo),則控制就返回到該子目標(biāo)的上一級目標(biāo)(即該子目標(biāo)謂詞所在規(guī)則的頭部)使它重新匹配?;厮菀彩荘ROLOG的一個重要機制2023/10/19華北電力大學(xué)49設(shè)所給的詢問是
?-friend(john,Y).(john和誰是朋友?)
則求解目標(biāo)為
friend(john,Y).
這時,系統(tǒng)對程序進行掃描,尋找能與目標(biāo)謂詞匹配合一的事實或規(guī)則頭部。顯然,程序中前面的四條事實均不能與目標(biāo)匹配,而第五個語句的左端即規(guī)則PROLOG程序的運行過程2023/10/19華北電力大學(xué)50friend(john,X):-likes(X,reading),likes(X,music).
頭部可與目標(biāo)謂詞匹配合一。但由于這個語句又是一個規(guī)則,所以其結(jié)論要成立則必須其前提全部成立。于是,對原目標(biāo)的求解就轉(zhuǎn)化為對新目標(biāo)
likes(X,reading),likes(X,music).
的求解。這實際是經(jīng)歸結(jié),規(guī)則頭部被消去,而目標(biāo)子句變?yōu)?/p>
?-likes(X,reading),likes(X,music).
現(xiàn)在依次對子目標(biāo)
likes(X,reading)和likes(X,music)求解PROLOG程序的運行過程2023/10/19華北電力大學(xué)51
子目標(biāo)的求解過程與主目標(biāo)完全一樣,也是從頭對程序進行掃描,不斷進行測試和匹配合一等,直到匹配成功或掃描完整個程序為止??梢钥闯?,對第一個子目標(biāo)like(X,reading)的求解因無可匹配的事實和規(guī)則而立即失敗,進而導(dǎo)致規(guī)則
friend(john,X):-likes(X,reading),likes(X,music).的整體失敗。于是,剛才的子目標(biāo)
likes(X,reading)和likes(X,music)PROLOG程序的運行過程2023/10/19華北電力大學(xué)52
被撤消,系統(tǒng)又回溯到原目標(biāo)friend(john,X)
這時,系統(tǒng)從該目標(biāo)剛才的匹配語句處(即第五句)向下繼續(xù)掃描程序中的子句,試圖重新使原目標(biāo)匹配,結(jié)果發(fā)現(xiàn)第六條語句的左部,即規(guī)則
friend(john,X):-likes(X,sports),likes(X,music).
的頭部可與目標(biāo)為謂詞匹配。但由于這個語句又是一個規(guī)則,于是,這時對原目標(biāo)的求解,就又轉(zhuǎn)化為依次對子目標(biāo)
likes(X,sports)和likes(X,music)PROLOG程序的運行過程2023/10/19華北電力大學(xué)53
的求解。這次子目標(biāo)likes(X,sports)與程序中的事實立即匹配成功,且變量X被約束為bell。于是,系統(tǒng)便接著求解第二個子目標(biāo)。由于變量X已被約束,所以這時第二個子目標(biāo)實際上已變成了
likes(bell,music).
由于程序中不存在事實likes(bell,music),所以該目標(biāo)的求解失敗。于是,系統(tǒng)就放棄這個子目標(biāo),并使變量X恢復(fù)為自由變量,然后回溯到第一個子目標(biāo),重新對它進行求解。由于系統(tǒng)已經(jīng)記住了剛才已同第一子目標(biāo)謂詞匹配過的事實的位置,所以重新求解時,便從下一個事實開始測試。PROLOG程序的運行過程2023/10/19華北電力大學(xué)54
易見,當(dāng)測試到程序中第三個事實時,第一個子目標(biāo)便求解成功,且變量X被約束為mary。這樣,第二個子目標(biāo)也就變成了
likes(mary,music).
再對它進行求解。這次很快成功。由于兩個子目標(biāo)都求解成功,所以,原目標(biāo)friend(john,Y)也成功,且變量Y被約束為mary(由Y與X的合一關(guān)系)。于是,系統(tǒng)回答:Y=mary
程序運行結(jié)束。上面只給出了問題的一個解。如果需要和可能的話,系統(tǒng)還可把john的所有朋友都找出來。我們把上述程序的運行過程再用示意圖描述如下:PROLOG程序的運行過程2023/10/19華北電力大學(xué)55圖PROLOG程序運行機理示例PROLOG程序的運行過程②①③④⑤⑥⑦⑧⑨2023/10/19華北電力大學(xué)56循環(huán)Prolog可以實現(xiàn)計數(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可以實現(xiàn)不計數(shù)循環(huán)(Do循環(huán))print1:-student(Number,Name,Score),write(Number),write(Name),write(Score),nl,fail.2023/10/19華北電力大學(xué)57表處理與遞歸表是有若干元素的有序序列,表中元素也可以為表PROLOG中采用一對方括號[]把表元素括起來,每個元素間用逗號或空格分開,例如:
[m,n,d,f]在PROLOG內(nèi)引入“|”符號,如[H|T]表示一個以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'
[][]無定義無定義
2023/10/19華北電力大學(xué)58表處理與遞歸例:設(shè)計一個能判斷對象X是表L的成員的程序分析:(1)如果X與L的表頭是同一個對象,則X是L的成員(2)如果X是L的表尾的成員,則X是L的成員程序:member(X,[X|Tail]).member(X,[Head|Tail]):-member(X,Tail).2023/10/19華北電力大學(xué)59表處理與遞歸表的拼接程序,即把兩個表連接成一個表
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]).no2023/10/19華北電力大學(xué)60表處理與遞歸表的輸出
print([]). print([H|T]):-write(H),print(T).?-print([3|[4,5,6,7]]).?-print([1,2,3]).2023/10/19華北電力大學(xué)61表處理與遞歸例:表的倒置 reverse([],[]). reverse([H|T],L):-reverse(T,L1),append(L1,[H],L).:-?-reverse([1,2,3],X).X=[3
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新保安服務(wù)合同解讀
- 長期信用借款保證書模版
- 教師與家長攜手承諾發(fā)展
- 鏈家改進版房屋買賣協(xié)議
- 版供水工程勞務(wù)分包合同
- 文明停車維護市容的使命
- 葡萄購銷合同模板
- 景觀石料購買協(xié)議
- 招標(biāo)信息酒店建設(shè)項目
- 啤酒花購銷合約
- UI設(shè)計·形考任務(wù)一
- 天津理工大學(xué)數(shù)據(jù)結(jié)構(gòu)實驗報告4
- 雷達(dá)原理與系統(tǒng)-雷達(dá)系統(tǒng)設(shè)計與實驗
- 充電樁工程施工組織設(shè)計施工組織
- 起訴狀(淘寶虛假交易)
- 論文《后疫情時代信息技術(shù)與幼兒園教育深度融合的策略研究》
- 2023-2024學(xué)年江西省南昌市數(shù)學(xué)六年級第一學(xué)期期末復(fù)習(xí)檢測模擬試題含答案
- 潛力評估表格
- 化工設(shè)計習(xí)題及答案
- 提高急性腦梗死的再灌注率PDCA
- 《孫悟空大鬧蟠桃會大鬧天宮》-課件
評論
0/150
提交評論