




已阅读5页,还剩109页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Prolog是一种逻辑程序设计语言,基于一阶谓词逻辑,是典型的叙述型语言(DeclarationLanguage)。Prolog语言的特点:(1)建立在一阶谓词逻辑和归结原理基础上,有自动推理功能。(2)用Prolog设计应用程序时,仅需指明领域中各对象间的关系和决策规则,而应用这些知识的推理由Prolog完成。(3)Prolog应用程序,由数据库和规则库组成。(4)Prolog程序设计要做三件事,即说明事实、定义规则、提出问题。,4.1归结原理与Prolog语言,Prolog有三种形式的语句:,1.B:-A1,A2,An.,含义是A1A2.AnB,相当于A1A2AnB。可视作人工智能系统中的推理规则。也可将该句看作一个过程,B为过程头,是过程名,而A1,A2,An为过程体。,2.A1,A2,An.,含义是A1A2.AnF,相当于A1A2An,可视作推理的目标,或称目标子句。,3.B.,含义是公式B无条件地为真。可视作已知的事实。,x(M(x)R(x)M(“张三”)R(“张三”),如三段论:,推理规则:R(X):-M(X).,事实:M(张三).,目标:R(张三).,Prolog语句:,证明公式:(M(X)R(X)M(张三)R(张三)恒真,即证明公式:(M(X)R(X)M(张三)R(张三)恒假,化成公式集:(M(X)R(X)M(张三),R(张三),子句集:M(X)R(X),M(张三),R(张三),推理规则,事实,目标,子句B:-A1,A2,An.和子句B.都是仅有一个正文字的子句。称作定子句。,目标子句A1,A2,An.是没有正文字出现的子句。,定子句和目标子句统成为Horn子句。Prolog子句都是Horn子句。,例:S=PQ,PQ,PQ,PQ其中PQ非Horn子句从而S不是Horn集。依分离规则,得SQ,QS=Q,Q有S不可满足等价于S、S同时不可满足。而且S、S均为Horn子句集,SLD(有选择的线性)归结由一个目标子句和若干个定子句组成的子句集称作定子句集,SLD归结是定子句集上的一种线性归结,从目标子句C0开始的,Ci是Ci-1与S中某定子句的归结式。可证明定子句上的SLD是完备的。Prolog解释过程采用的是受限的SLD归结,每次归结总是从目标子句最左边文字开始的,而且依次同定子句作归结(宽度优先),当全部定子句均不能与当前目标子句最左边文字作归结时,引起回溯,选定当前目标子句的下一个文字为被归结文字。,例:已知(1)P(x,z)Q(x,y),P(y,z)(2)P(x,x)(3)Q(a,b)目标为P(x,b)归结过程见右图,用Prolog证明三段论:,推理规则:R(X):-M(X).,事实:M(张三).,目标:R(张三).,M(张三).,完整的Prolog程序:,predicatesM(symbol)R(symbol)clausesR(X):-M(X).M(zhsan).goalR(zhsan).,4.2家庭关系程序示例,下图是一个表示家庭关系的实例:,parent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).,用Prolog语句表示为:,完整的Prolog程序:,predicatesparent(symbol,symbol)clausesparent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).,此程序可以回答的问题:,1.bob是pat的父母吗??_parent(bob,pat).,2.liz是pat的父母吗??_parent(liz,pat).,3.谁是liz的父母??_parent(X,liz).,4.谁是谁的父母??_parent(X,Y).,5.谁是jim的祖父母?,分析:程序中并没有直接的祖父母关系。此问题可分两步:,(1)谁是jim的父母?假设是Y,(2)谁是Y的父母?假设是X,X,jim,Y,parent,parent,grandparent,Prolog目标语句:,?_parent(Y,jim),?_parent(X,Y).,6.类似的问题可以是:,“谁是tom的孙子?”,prolog目标语句:,?_parent(tom,X),?_parent(X,Y).,parent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).,clauses,以上程序说明的几个重要观点:,(1)在Prolog中定义一个关系是容易的,可以通过满足关系的n个对象来表达。,(2)对程序中已定义的关系,用户可以轻而易举地询问Prolog系统。,(3)关系的对象可以是常量(如:tom,ann),也可以是变量(如:X,Y)。,(4)向系统提出问题,可由一个或多个目标组成。,(5)一个Prolog程序由一些子句(clauses)组成。每个子句用句号结束。,(6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。在肯定回答的情况下,说相应的目标是可满足的,而且这个目标成功了。否则,说目标不可满足,目标失败了。,(7)如果有多个回答都满足目标,那么Prolog将尽可能多地回答。,Predicatesparent(symbol)clausesparent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).,male(tom).male(bob).male(jim).female(pam).female(liz).female(pat).female(ann).,在示例程序中,添加有关性别的信息:,在Prolog中定义offspring(后代)关系,对所有的X和Y,Y是X的后代,如果X是Y的父母。,对应的prolog语句为:,offspring(Y,X):-parent(X,Y).,子句头,子句体,注意:以上定义的是直接后代关系。,对于间接后代:,对所有的X和Y,Y是X的后代,如果Z是Y的父母,且Z是X的后代。,offspring(Y,X):-parent(Z,Y),offspring(Z,X).,对应的prolog语句为:,X,Y,Z,parent,offspring,offspring,关于sister的规则定义:,predicatesparent(symbol,symbol)sister(symbol,symbol)female(symbol)male(symbol)clausesparent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).,male(tom).male(bob).male(jim).female(pam).female(liz).female(ann).female(pat).sister(X,Y):-parent(Z,X),parent(Z,Y),female(X).goalsister(X,pat).,Pat的姐妹是谁?,predicatesparent(symbol,symbol)sister(symbol,symbol)female(symbol)male(symbol)different(symbol,symbol)clausesparent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).male(tom).,male(bob).male(jim).female(pam).female(liz).female(ann).female(pat).sister(X,Y):-parent(Z,X),parent(Z,Y),female(X),different(X,Y).different(X,Y):-XY.goalsister(X,pat).,改进的sister规则:,Pat的姐妹是谁?,mother规则:,对所有的X和Y,,X是Y的母亲,,如果X是Y的父母,,并且,X为女性。,用prolog规则表示为:,mother(X,Y):-parent(X,Y),female(X).,predicatesparent(symbol,symbol)mother(symbol,symbol)female(symbol)male(symbol)clausesparent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).,mother(X,Y):-parent(X,Y),female(X).,male(tom).male(bob).male(jim).female(pam).female(liz).female(ann).female(pat).,goalmother(pat,X).,Pat是谁的母亲?,4.3TurboProlog程序结构,一个TurboProlog程序通常包括5个部分。如下:,/*注释*/domains域说明database数据库说明predicates谓词说明goal目标说明clauses子句说明/*注释*/,1.域说明部分,说明谓词对象的数据类型。,2.数据库说明部分,包含一些数据库谓词的定义,是说明用于动态数据库管理的谓词。如果程序不需要动态数据库,该部分可省略。,3.谓词说明部分,定义程序中除内部谓词以外的所有谓词。,4.在目标部分,说明程序的目标。一个程序目标可以由多个字目标复合而成。,5.子句部分,列出全部事实和规则,也可看作是程序的静态数据。,/*程序名:Wordsmith文件名:*/*目标:查找并打印一单词的同义词或反义词。*/domainsword,syn,ant=symbolpredicatessynonym(word,syn)antonym(word,ant)goalsynonym(brave,X),antonym(brave,Y),write(brave的同义词是:,X),nl,write(brave的反义词是:,Y),nl.clausessynonym(brave,daring).synonym(honest,truthful).synonym(modern,new).synonym(rare,uncommon).antonym(brave,cowardly).antonym(honest,dishonest).antonym(mordern,ancient).antonym(rare,common).,4.4TurboProlog程序分析,/*程序名:Thesaurus文件名:*/*目标:建立一个打印单词的同义词和反义词的小词典。*/domainsword,syn1,syn2,syn3,ant1,ant2,ant3=symbolpredicatessynonym(word,syn1,syn2,syn3)antonym(word,ant1,ant2,ant3)goalsynonym(brave,S1,S2,S3),antonym(brave,A1,A2,A3),write(brave的同义词是:),nl,write(S1,S2,S3,),write(brave的反义词是:),nl,write(A1,A2,A3,.),nl.,clausessynonym(brave,daring,defiant,courageous).synonym(honest,truthful,open,sincere).synonym(modern,new,novel,recent).synonym(rare,uncommon,scrace,infrequent).antonym(brave,cowardly,fearful,timid).antonym(honest,dishonest,crooked,deceltful).antonym(mordern,ancient,old,obsolete).antonym(rare,common,ordinary,ubiquitous).,多元谓词、多元子句,/*程序名:Presidents文件名:*/*目标:使用混合对象类型举例。*/domainsname,party,state=symbolbirth_year,year_in,year_out=integerpredicatespresident(name,party,state,birth_year,year_in,year_out)goalpresident(X,democrat,S,Yb,Yi,Yo),nl,write(X,-democrat),nl,write(State-,S),nl,write(Birth_year-,Yb),nl,write(Year_in-,Yi),nl,write(Year_out-,Yo),nl,nl.clausespresident(elsenhower,republican,texas,1890,1953,1961).president(kennedy,democrat,massachusetts,1917,1961,1963).president(johnson,democrat,texas,1908,1963,1969).president(nixon,republican,california,1913,1969,1974).president(ford,republican,nebraska,1913,1974,1977).president(carter,democrat,georgia,1924,1977,1981).,混合域的使用,/*程序名:Rlatives文件名:*/*目标:规则结构举例*/domainsperson=symbolpredicatesmale(person)female(person)parents(person,person,person)sister(person,person)who_is_the_sistergoalwho_is_the_sister.clauses/*事实*/male(Frank).male(Sam).female(Mary).female(Debbie).parents(Sam,Frank,Mary).parents(Debbie,Frank,Mary).,/*规则*/who_is_the_sister:-sister(Sister,Brother),write(Sister,isthesisterof,Brother,.),nl.sister(Sister,Brother):-female(Sister),male(Brother),parents(Sister,Father,Mother),parents(Brother,Father,Mother).,目标中使用规则,domainsman=symbolpredicateschoice(man)short_height(man)medium_height(man)tall_height(man)black_hair(man)brown_hair(man)blond_hair(man)old_car(man)new_car(man)sports_car(man)kathy_choice(man)who_is_the_choicegoalwho_is_the_choice.clauses/*事实*/choice(bill).choice(jim).choice(mark).choice(robert).choice(willy).,/*规则*/who_is_the_choice:-kathy_choice(Choice),write(Kathyschoiceis,Choice,.),nl.kathy_choice(Choice):-choice(Choice),tall_height(Choice),blond_hair(Choice),sports_car(Choice).,choice(tom).choice(frank).short_height(mark).short_height(willy).medium_height(jim).medium_height(tom).tall_height(jim).tall_height(robert).tall_height(frank).black_hair(bill).black_hair(willy).brown_hair(jim).brown_hair(tom).blond_hair(mark).blond_hair(robert).blond_hair(frank).new_car(mark).new_car(willy).new_car(frank).old_car(mark).old_car(tom).sports_car(jim).sports_car(robert).,简单数据库,/*程序名:Europair文件名:*/*目标:否定谓词应用举例*/domainscountry=symbolpredicateseuro_pair(country,country)border(country,country)find_non_border_pairgoalfind_non_border_pair.clauseseuro_pair(France,Germany).euro_pair(France,Spain).euro_pair(France,Italy).euro_pair(Germany,Spain).euro_pair(Germany,Italy).euro_pair(Spain,Italy).border(France,Germany).border(France,Spain).border(France,Italy).find_non_border_pair:-euro_pair(X,Y),not(border(X,Y),write(X,-,Y),nl.,否定谓词的应用,domainspersonal_library=book(title,author,publisher,year)collector,title,author,publisher=symbolyear=integerpredicatescollection(collector,personal_library)clausescollection(kahn,book(TheComputerandtheBrain,vonNeumann,YaleUniversityPress,1958).collection(kahn,book(SymbolicLogic,LewisCarroll,DoverPublications,1958).collection(john,book(Database:APrimer,C.J.Date,Addison-Wesley,1983).collection(john,book(Problem-SolvingMethodsinAI,NilsNilsson,McGraw-Hill,1971).collection(smith,book(Alice,inWonderland,LewisCarroll,TheNewAmericanLibrary,1960).collection(smith,book(FablesofAesop,Aesop-Calder,DoverPublications,1967).,复合对象的应用,域结构图,域,第0层(结构),第1层(对象),DomainStructureDiagram,collection,collector,book,title,author,publisher,year,谓词结构图,PredicateStructureDiagram,谓词(主函子),函子,第0层,第1层,第2层,domainspersonal_library=book(title,author,publication)publication=publication(publisher,year)collector,title,author,publisher=symbolyear=integerpredicatescollection(collector,personal_library)clausescollection(kahn,book(TheComputerandtheBrain,vonNeumann,publication(YaleUniversityPress,1958).collection(kahn,book(SymbolicLogic,LewisCarroll,publication(DoverPublications,1958).collection(john,book(Database:APrimer,C.J.Date,publication(Addison-Wesley,1983).collection(john,book(Problem-SolvingMethodsinAI,NilsNilsson,publication(McGraw-Hill,1971).collection(smith,book(Alice,inWonderland,LewisCarroll,publication(TheNewAmericanLibrary,1960).collection(smith,book(FablesofAesop,Aesop-Calder,publication(DoverPublications,1967).,三层域结构和四层谓词结构,personal_library,book,title,author,publication,year,域结构图,域,第0层,第1层,DomainStructureDiagram,collection,collector,book,title,author,publisher,year,谓词结构图,PredicateStructureDiagram,谓词(主函子),函子,第0层,第1层,第2层,publisher,第2层,publisher,第3层,4.5表与递归,表是含有任意数目的其他对象的一个对象。,一个包含1,2,3的表可被写成:1,2,3,表中的每个项被称为一个元素。,在域说明中需要对表类型进行说明。如:,domainsintegerlist=integer*predicatesnumber(integerlist),表头:是表中的第一个元素。如:表a,b,c中a是表头。,表尾:是表中除表头外的另一张表。如:表a,b,c中b,c是表尾。,空表:没有元素的表。对于表c,c是表头,是表尾。,a,b,c,d,a,b,c,d,b,c,d,c,d,d,Prolog提供一种使表头和表尾明确分开的方法:用逗号将元素分开,用|号将表头和表尾分开。如:,a,b,c等价于a|b,c等价于a|b|c等价于a|b|c|,打印表中元素的例子:,domainslist=integer*predicateswrite_a_list(list)clauseswrite_a_list().write_a_list(H|T):-write(H),nl,write_a_list(T).goalwrite_a_list(1,2,3).,表元素记数的例子:,domainslist=integer*predicateslength_of(list,integer)clauseslength_of(,0).length_of(_|T,L):-length_of(T,TailLength),L=TailLength+1.goallength_of(1,2,3,L).,domainslist=integer*predicatesadd1(list,list)clausesadd1(,)./*boundarycondition*/add1(Head|Tail,Head1|Tail1):-/*separatethehead*/*fromtherestofthelist*/Head1=Head+1,/*add1tothefirstelement*/add1(Tail,Tail1)./*callelementwiththerestofthelist*/goaladd1(1,2,3,4,NewList).,修改表,对表中的每个元素加1,为了将1加至空表上的所有元素,只需生成另一张空表。为了将1加至其它表上的所有元素,将1加至表头,并使它成为结果表的表头,然后将1加至表尾的每个元素,并使它成为新的表尾。,表合并:,domainsintegerlist=integer*predicatesappend(integerlist,integerlist,integerlist)clausesappend(,List,List).append(X|L1,List2,X|L3):-append(L1,List2,L3).goalappend(1,2,3,4,5,Newlist).,4.6文件与数据库,Prolog打开及关闭文件有8个内部谓词:,openread谓词,打开文件用于读操作。,openwrite谓词,打开文件用于写操作。,openappend谓词,打开文件,在文件尾拼加。,openmodify谓词,打开文件用于读和写操作。,closfile谓词,用于关闭指定的文件。,readdevice谓词,重新设置当前读设备,或获取当前读设备的名字。,writedevice谓词,重新设置当前写设备,或获取当前写设备的名字。,32,二、VisualProlog与Prolog,Prolog最重要的好处是非常公平地适用于任何应用领域:通过让程序员建立对象和进程之间的逻辑关系,复杂问题更容易从本质上求解,而且产生的程序在其生命周期更容易维护。定制知识库、专家系统、自然语言接口和智能信息管理系统这些应用都是当前使用VisualProlog进行程序设计的领域范围。Prolog已经走出了人工智能实验室,PDC(PROLOGDevelopmentCenter)的VisualProlog是一个商业上富有竞争的通用开发环境。VisualProlog因其容易增加程序甚至网站的智能化特性而日益变成许多开发者选择的工具。,33,Prolog是一种众所周知的说明性语言。这就是说,给出所需要的事实和规则,Prolog将使用演绎推理求解编程问题。这与传统的过程性编程语言如C、BASIC和Pascal等形成了鲜明的对照。在过程性语言中,程序员必须提供一步一步的指令,准确地告诉计算机如何求解给定的问题。换句话说,程序员必须预先知道如何求解这个问题。另一方面,Prolog程序员只需要提供对问题的描述和求解的基本规则。此后,Prolog系统将确定如何找到一个解。Prolog鼓励程序员从结构良好的问题描述开始,因而实际上,Prolog也可以被用作指定产品的规格说明工具和实现工具。,34,VisualProlog是PDCProlog和TurboProlog的后继产品。在微机上,VisualProlog是基于Windows环境的,而早期的PDCProlog和TurboProlog是基于DOS环境的。VisualProlog特别适合于处理知识和知识问题求解,是优秀的智能化应用开发工具。同时也已经成为适合于任何应用领域的通用开发工具。PDC的VisualProlog特别适用于这些传统类型的数据库任务,因为VisualProlog具有的编程能力之一就是十分易于使用的数据库引擎。,35,VisualProlog由于高度优化的编译器,创建的程序非常快,几乎与基于C+的应用程序一样快。Web编程支持和对象机制这两种功能是对VisualProlog商用有效性的巨大贡献。对象机制本身就是一种非常强大的建模工具,几乎已经成了Pascal、C+、Smalltalk等语言的一种事实上的标准。Web编程支持是一个重要的新特性。譬如,用VisualProlog写的专家系统,可以被连接到Web页,在支持部门、网上贸易和其它一些基于Web技术的开发等方面将发挥重要作用。,36,三、Prolog能作何用?,人工智能应用,Prolog最初是作为一种人工智能(AI)语言设计的,它非常适合于专家系统和类似的AI应用。框架和基于规则的系统,前向链和后向链,模式匹配机制,约束求解机制,都是自然而精致的Prolog潜在语义的表达式。PDC的用户已经在银行、航空、健康、保险、医疗、工业等广泛的领域建成咨询系统、决策支持、诊断、专家系统外壳或自然语言应用程序。,37,其它领域的应用,Prolog的能力已经延伸到AI之外。高级抽象,表示复杂数据结构的易用性和简明性,使得编程的说明性方法有益于任何学科或问题求解策略。基于这个原因,VisualProlog已经广泛用来建造行政事务、高级数据库管理、规划和调度系统、基于Web的应用等等。,38,关于VisualProlog资料,VP的(中文)资料有:VisualProlog语言教程(陕西科技出版社)VisualProlog编程、环境及接口(国防工业出版社)联机帮助文件(英文)HTML格式的资料(英文),39,HTML格式的资料,VP资料的一个重要部分是随VP一起提供的HTML格式文件(在HTML和其它子目录)。VP概述(INTRO.HTM)在VisualPrologCD上,并在安装时被拷贝到VisualProlog的根目录。从INTRO.HTM文件开始(可以从VDE的Help|IntroductiontoVP打开它),将会发现连接到所提供的其它HTML格式资料和PDCWeb上的大量信息。随VP一起,包含许多典型例子,可以直接检查和编译。这可能是学习Prolog编程和熟悉VP开发环境的最好方法之一。为了找到有关VP的Web信息,可以使用VDE中Help|VisualPrologonWEB下的子菜单。,40,系统需求,为了运行VisualProlog可视化开发环境,必需:MicrosoftWindows95/98/Me/NT/2000/XPPentium以上配置的PC机至少8MBRAM,推荐32MBRAM以上硬盘至少15MB自由空间,专业版本完全安装大约需要200MB,Chapter2VisualProlog简单教程,41,Hanoi塔,42,这是一个非常古老的问题,在许多程序设计语言中都把它作为经典的递归例子来讲解,Prolog也不例外。不过,你将看到使用Prolog能够更加简洁地解决这个问题。题:如上图,目的是把左边的所有盘子移到右边的杆子上。一次只能移动一个盘子,你可以使用中间的杆子作为临时存放盘子的地方。小盘子必须放在大盘子之上。问题看似不难。的确,如果盘子只有两三个,是很容易解决的。但是随着盘子数目的增加,问题就变得非常难解了。,43,五五迷题TheZebra-program,44,这是个非常有趣的逻辑难题:有五个房子,每个房子的颜色不同,里面分别住着不同国家的人,每个人都有自己养的不同的宠物,喜欢和不同的饮料,抽不同牌子的烟。现在已知以下的一些信息:,45,现在已知以下的一些信息:英国人(englishman)住在红色(red)的房子里。西班牙人(spaniard)养了一条狗(dog)。挪威人(norwegian)住在左边的第一个房子里。黄房子(yellow)里的人喜欢抽kools牌的香烟。抽chesterfields牌香烟的人与养狐狸(fox)的人是邻居。挪威人(norwegian)住在蓝色(blue)的房子旁边。抽winston牌香烟的人养了一只蜗牛(Snails)。抽LuckyStrike牌香烟的人喜欢喝桔子汁(orangejuice)。乌克兰人(ukrainian)喜欢喝茶(tea)。日本人(japanese)抽parliaments牌的烟。抽kools牌的香烟的人与养马(horse)的人是邻居。喜欢喝咖啡(coffee)的人住在绿(green)房子里。绿(green)房子在象牙白(ivory)房子的右边(图中的右边)。中间那个房子里的人喜欢喝牛奶(milk)。根据以上条件,你能告诉我们哪个房子里的人养斑马(zebra),哪个房子里的人喜欢喝水(water)吗?或者你能把所有的东西都对号入座吗?,46,这是个典型的条件约束的问题,根据每个条件,我们都可以排除一些情况,直到最后找到答案。不过由于这个问题的条件太多,如果人工来解答,是很要花上一点时间的。还不如我们用这个时间来编一个程序,让计算机来解答。真的,编程花的时间一定要比人工计算还要少!使用Prolog来解决这类的问题,一般使用的是“选择再校验”的方法。即用某种方法提出一系列的可能的解,再由校验部分来判断此解是否合乎题意。直到找到答案为止。我们先来分析一下到底有多少种可能的解。每个房子有不同的颜色,所以就颜色来说就有5!种情况,而一共有五个特征:颜色、国籍、宠物、香烟和饮料。所以一共就有5!*5种情况,即600种。不是很多,完全可以使用程序穷举出来。,2.1概述VisualProlog2.2Prolog语句2.3Prolog程序运行机理2.4程序结构2.5数据与表达式2.6例子,47,安装与界面,48,49,50,51,52,53,54,55,入门:一个例子,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).,56,?friend(john,Y).,逻辑思维在我们日常生活中比比皆是,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).,57,?friend(john,Y).,58,逻辑编程,59,运用经典的逻辑理论,我们可以说“所有的人(person)都属于人类(moral)”,如果用Prolog的语言来说就是“对于所有的X,只要X是一个人,它就属于人类。”,moral(X):-person(X).,同样,我们还可以加入一些简单的事实,比如:苏格拉底(socrates)是一个人。person(socrates).,有了这两条逻辑声明,Prolog就可以判断苏格拉底是不是属于人类。,?-mortal(socrates).,60,61,2.2Prolog语句,factsrulesQuestion,62,事实(facts),63,事实(facts)是prolog中最简单的谓词(predicate)。它和关系数据库中的记录十分相似。我们可以把事实作为数据库来搜索。,谓词:Prolog语言的基本组成元素,可以是一段程序、一个数据类型或者是一种关系。它由谓词名和参数组成。两个名称相同而参数的数目不同的谓词是不同的谓词。,64,格式:().或者:pred(arg1,arg2,.argN).其中pred为谓词的名称。arg1,.为参数,共有N个。.是所有的Prolog子句的结束符。没有参数的谓词形式如下:pred.,事实的语法结构如下:,整数(integer)绝对值小于某一个数的正数或负数。原子(atom)由小写字母开头的字符串。变量(variable)由大写字母或下划线(_)开头。结构(structure)其他的数据类型,例如浮点数和字符串等。,原子谓词公式,65,功能:一般表示对象的性质或关系事实通常用来储存程序所需的数据。,例,66,再看一个例子,视窗系统使用事实储存不同的窗口信息。在这个例子中参数有窗口名称和窗口的位置坐标。window(main,2,2,20,72).window(errors,15,40,20,78).某个医疗专家系统可能有如下的疾病数据库。disease(plague,infectious).疾病(瘟疫,有传染性),规则(rules),67,规则的实质就是储存起来的查询。Rules:WhatYouCanInferfromGivenFacts它的语法如下:head:-body其中,head是谓词的定义部分,与事实一样,也包括谓词名和谓词的参数说明。:-连接符,一般可以读作如果。body一个或多个目标。,形式:逻辑蕴涵式,68,Herearethefacts,writteninPrologsyntax:likes(bill,cindy).likes(cindy,bill).likes(bill,dogs).green(kermit).girl(caitlin).,Herearesomerulesconcerningalikesrelation:CindylikeseverythingthatBilllikes.Caitlinlikeseverythingthatisgreen.Giventheserules,youcaninferfromthepreviousfactssomeofthethingsthatCindyandCaitlinlike:CindylikesCindy.CaitlinlikesKermit.,69,ToencodethesesamerulesintoProlog,youonlyneedtochangethesyntaxalittle,likethis:likes(cindy,Something):-likes(bill,Something).likes(caitlin,Something):-green(Something).The:-symbolissimplypronouncedif,andservestoseparatethetwopartsofarule:theheadandthebody.Youcanalsothinkofaruleasaprocedure.Inotherwords,theseruleslikes(cindy,Something):-likes(bill,Something)likes(caitlin,Something):-green(Something).alsomeanToprovethatCindylikessomething,provethatBilllikesthatsamethingandToprovethatCaitlinlikessomething,provethatitisgreen.Inthesamesideeffectsproceduralway,arulecanaskPrologtoperformactionsotherthanprovingthings-suchaswritingsomethingorcreatingafile.,CindylikeseverythingthatBilllikes.Caitlinlikeseverythingthatisgreen.CindylikesCindy.CaitlinlikesKermit.,问题(questions)Queries,70,OncewegivePrologasetoffacts,wecanproceedtoaskquestionsconcerningthesefacts;thisisknownasqueryingthePrologsystem.WecanaskPrologthesametypeofquestionsthatwewouldaskyouabouttheserelations.Basedupontheknownfactsandrulesgivenearlier,youcananswerquestionsabouttheserelations,justasPrologcan.,Innaturallanguage,weaskyou:DoesBilllikeCindy?InPrologsyntax,weaskProlog:likes(bill,cindy).Giventhisquery,PrologwouldansweryesbecauseProloghasafactthatsaysso.Asalittlemorecomplicatedandgeneralquestion,wecouldaskyouinnaturallanguage:WhatdoesBilllike?InPrologsyntax,weaskProlog:likes(bill,What).,71,1,72,2.3Prolog程序运行机理例,73,likes(bell,sports).likes(mary,music).likes(mary,sports).friend(john,X):-likes(X,reading),likes(X,music).friend(john,X):-likes(X,sp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年热线中心考试模拟题
- 幼儿园小不点教学课件
- 2025年安全员证考试重点案例及答案
- 教学设计与课件制作讲座
- 2025年宠物店员初级面试常见问题集
- 2025年工程造价工程师专业知识考核试题及答案解析
- 课与课件融合
- 2025年财务管理专业求职面试指南与模拟题答案
- 2025年新媒体运营师中级考试知识点详解与模拟题
- 2025年慈善组织传播总监考试备考
- 幼儿园教职工保密协议内容
- 校园安全工作专题培训会
- 《大数据基础》 课件 项目一 走进大数据
- 橡皮障隔离术知情同意书
- 临床医学内科学-消化系统疾病-肠结核和结核性腹膜炎
- 营区物业服务投标方案(技术标)
- 小学语文人教版一年级上册《我上学了单元整备课》word版教案
- 高效能人士七个习惯
- 血浆置换在危重病人中的应用教学课件
- 六年级上册科学全册练习题(2022年新教科版)
- 沉井下沉纠偏措施
评论
0/150
提交评论