用于人工智能的Prolog语言学习教案

上传人:莉**** 文档编号:102481597 上传时间:2022-06-07 格式:PPTX 页数:31 大小:202.36KB
返回 下载 相关 举报
用于人工智能的Prolog语言学习教案_第1页
第1页 / 共31页
用于人工智能的Prolog语言学习教案_第2页
第2页 / 共31页
用于人工智能的Prolog语言学习教案_第3页
第3页 / 共31页
点击查看更多>>
资源描述
会计学1用于人工智能用于人工智能(rn n zh nn)的的Prolog语言语言第一页,共31页。 Prolog 是一种逻辑程序设计语言,基于一阶谓词逻辑,是典型的叙述型语言(是一种逻辑程序设计语言,基于一阶谓词逻辑,是典型的叙述型语言(Declaration Language)。)。 Prolog语言的特点语言的特点(tdin):(1) 建立在一阶谓词逻辑和归结原理基础上,有自动推理功能。建立在一阶谓词逻辑和归结原理基础上,有自动推理功能。(2) 用用Prolog设计应用程序时,仅需指明领域中各对象间的关系和决策规设计应用程序时,仅需指明领域中各对象间的关系和决策规 则,而应用这些知则,而应用这些知识的推理由识的推理由Prolog 完成。完成。(3) Prolog应用程序,由数据库和规则库组成。应用程序,由数据库和规则库组成。(4) Prolog程序设计要做三件事,即说明事实、定义规则、提出问题。程序设计要做三件事,即说明事实、定义规则、提出问题。4.1 归结原理(yunl)与Prolog语言第1页/共31页第二页,共31页。Prolog 有三种形式(xngsh)的语句:1.B:- A1,A2,An . 含义是 A1 A2. An B ,相当于A1A2 An B。可视作人工智能系统中的推理规则。也可将该句看作一个(y )过程,B为过程头,是过程名,而A1,A2,An 为过程体。2.A1,A2,An . 含义是 A1 A2 . An F ,相当于A1A2 An,可视作推理(tul)的目标,或称目标子句。3.B. 含义是公式B无条件地为真。可视作已知的事实。x(M(x) R(x)M(“张三”)R(“张三”)如三段论:推理规则:R(X):- M(X).事实:M(张三).目标:R(张三).Prolog语句:第2页/共31页第三页,共31页。证明(zhngmng)公式:( (M(X) R(X) ) M(张三) ) R(张三) 恒真即证明公式(gngsh):( ( (M(X) R(X) ) M(张三) ) R(张三) ) 恒假化成(hu chn)公式集: ( (M(X) R(X) ) M(张三) ) , R(张三) 子句集: M(X) R(X) ,M(张三) ) , R(张三) 推理规则事实目标子句 B:- A1,A2,An .和子句B.都是仅有一个正文字的子句。称作定子句。目标子句 A1,A2,An .是没有正文字出现的子句。定子句和目标子句统成为Horn子句。Prolog 子句都是Horn子句。第3页/共31页第四页,共31页。用Prolog证明(zhngmng)三段论:推理(tul)规则:R(X):- M(X).事实(shsh):M(张三).目标:R(张三).M(张三).完整的Prolog程序:predicatesM(symbol) R(symbol)clauses R(X):- M(X). M(zhsan).goal R(zhsan).运行第4页/共31页第五页,共31页。4.2 家庭关系(gun x)程序示例下图是一个表示家庭关系(gun x)的实例:PamTomAnnBobLizPatJimparent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).用Prolog 语句(yj)表示为:第5页/共31页第六页,共31页。完整(wnzhng)的Prolog程序:predicates parent(symbol, symbol)clausesparent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).此程序可以(ky)回答的问题:1.bob是pat的父母(fm)吗?parent(bob,pat). 2.liz是pat的父母吗?parent(liz,pat). 3.谁是liz的父母?parent(X,liz). 4.谁是谁的父母?parent(X,Y). 1.系统回答2.系统回答3.系统回答4.系统回答第6页/共31页第七页,共31页。5.谁是jim的祖父母?分析:程序中并没有直接(zhji)的祖父母关系。此问题可分两步:(1)谁是jim 的父母(fm)?假设是Y,(2)谁是Y 的父母(fm)?假设是X,XjimYparentparentgrandparentProlog目标语句:parent(Y,jim),parent(X,Y).6.类似的问题可以是:“谁是tom的孙子?”prolog目标语句:parent(tom,X),parent(X,Y).5.系统回答6.系统回答parent(pam,bob).parent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).clauses第7页/共31页第八页,共31页。以上程序说明的几个(j )重要观点:(1)在Prolog中定义一个关系是容易的,可以通过满足(mnz)关系的n个对象来表达。(2)对程序中已定义的关系,用户可以轻而易举地询问(xnwn)Prolog 系统。(3)关系的对象可以是常量 (如:tom,ann) ,也可以是变量(如:X,Y)。(4)向系统提出问题,可由一个或多个目标组成。(5)一个Prolog 程序由一些子句(clauses)组成。每个子句用句号结束。(6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。在肯定回答的情况下,说相应的目标是可满足的,而且这个目标成功了。否则,说目标不可满足,目标失败了。(7)如果有多个回答都满足目标,那么Prolog 将尽可能多地回答。第8页/共31页第九页,共31页。Predicates parent(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).在示例程序中,添加有关性别(xngbi)的信息:第9页/共31页第十页,共31页。在Prolog中定义(dngy)offspring(后代)关系对所有的X和Y,Y是X的后代(hudi),如果X是Y的父母。对应(duyng)的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 语句为:XYZparentoffspringoffspring第10页/共31页第十一页,共31页。关于sister的规则(guz)定义: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).运行(ynxng)Pat的姐妹(jimi)是谁?第11页/共31页第十二页,共31页。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).改进(gijn)的sister规则:运行(ynxng)Pat的姐妹(jimi)是谁?第12页/共31页第十三页,共31页。mother规则(guz):对所有(suyu)的X和Y,X是Y的母亲(m qn),如果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是谁的母亲?运行第13页/共31页第十四页,共31页。4.3 Turbo Prolog程序结构一个Turbo Prolog程序通常包括(boku)5个部分。如下:/*注释 */domains域说明(shumng)database数据库说明(shumng)predicates谓词说明(shumng)goal目标说明(shumng)clauses子句说明(shumng)/*注释 */1.域说明(shumng)部分,说明(shumng)谓词对象的数据类型。2.数据库说明部分,包含一些数据库谓词的定义,是说明用于动态数据库管理的谓词。如果程序不需要动态数据库,该部分可省略。3.谓词说明部分,定义程序中除内部谓词以外的所有谓词。4.在目标部分,说明程序的目标。一个程序目标可以由多个字目标复合而成。5.子句部分,列出全部事实和规则,也可看作是程序的静态数据。第14页/共31页第十五页,共31页。/* 程序(chngx)名 : Wordsmith 文件名 : prog0501.pro */* 目 标 : 查找并打印一单词的同义词或反义词。 */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.4 Turbo Prolog程序(chngx)分析第15页/共31页第十六页,共31页。/* 程序名 : Thesaurus 文件名 : prog0502.pro */* 目 标 : 建立一个打印单词(dnc)的同义词和反义词的小词典。*/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).多元谓词(wi c)、多元子句第16页/共31页第十七页,共31页。/* 程序名 : Presidents 文件名 : prog0503.pro */* 目 标 : 使用混合对象类型(lixng)举例。 */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).混合(hnh)域的使用第17页/共31页第十八页,共31页。/* 程序名 : Rlatives 文件名 : prog0504.pro */* 目 标 : 规则(guz)结构举例 */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,is the sister of ,Brother,.), nl.sister(Sister,Brother):-female(Sister),male(Brother),parents(Sister,Father,Mother),parents(Brother,Father,Mother).目标中使用(shyng)规则第18页/共31页第十九页,共31页。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(Kathys choice is ,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).简单(jindn)数据库第19页/共31页第二十页,共31页。/* 程序名 : Europair 文件名 : prog0506.pro */* 目 标 : 否定谓词(wi c)应用举例 */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.否定谓词(wi c)的应用第20页/共31页第二十一页,共31页。domainspersonal_library=book(title,author,publisher,year)collector,title,author,publisher=symbolyear=integerpredicatescollection(collector,personal_library)clausescollection(kahn, book(The Computer and the Brain, von Neumann, Yale University Press,1958).collection(kahn, book(Symbolic Logic, Lewis Carroll, Dover Publications,1958). collection(john, book(Database: A Primer, C. J. Date, Addison-Wesley,1983).collection(john, book(Problem-Solving Methods in AI, Nils Nilsson, McGraw-Hill,1971).collection(smith, book(Alice, in Wonder land, Lewis Carroll, The New American Library,1960). collection(smith, book(Fables of Aesop, Aesop-Calder, Dover Publications,1967).复合(fh)对象的应用第21页/共31页第二十二页,共31页。personal_librarybooktitleauthorpublisheryear域结构图域第0层(结构(jigu)第1层(对象(duxing)Domain Structure Diagramcollectioncollectorbooktitleauthorpublisheryear谓词(wi c)结构图Predicate Structure Diagram谓词 (主函子)函子第0层第1层第2层第22页/共31页第二十三页,共31页。domainspersonal_library=book(title,author,publication)publication=publication(publisher,year)collector,title,author,publisher=symbolyear=integerpredicatescollection(collector,personal_library)clausescollection(kahn, book(The Computer and the Brain, von Neumann, publication(Yale University Press,1958).collection(kahn, book(Symbolic Logic, Lewis Carroll, publication(Dover Publications,1958). collection(john, book(Database: A Primer, C. J. Date, publication(Addison-Wesley,1983).collection(john, book(Problem-Solving Methods in AI, Nils Nilsson, publication(McGraw-Hill,1971).collection(smith, book(Alice, in Wonder land, Lewis Carroll, publication(The New American Library,1960).collection(smith, book(Fables of Aesop, Aesop-Calder, publication(Dover Publications,1967).三层域结构(jigu)和四层谓词结构(jigu)第23页/共31页第二十四页,共31页。personal_librarybooktitleauthorpublicationyear域结构图域第0层第1层Domain Structure Diagramcollectioncollectorbooktitleauthorpublisheryear谓词(wi c)结构图Predicate Structure Diagram谓词(wi c) (主函子)函子第0层第1层第2层publisher第2层publisher第3层第24页/共31页第二十五页,共31页。4.5 表与递归表是含有(hn yu)任意数目的其他对象的一个对象。一个(y )包含1,2,3的表可被写成:1,2,3表中的每个项被称为(chn wi)一个元素。在域说明中需要对表类型进行说明。如:domainsintegerlist=integer*predicatesnumber(integerlist)表头:是表中的第一个元素。如:表a,b,c中a是表头。表尾:是表中除表头外的另一张表。如:表a,b,c中b,c是表尾。空表:没有元素的表 。对于表c,c是表头, 是表尾。a,b,c,d,ab,c,d,bc,d,cdd 第25页/共31页第二十六页,共31页。Prolog 提供一种使表头和表尾明确(mngqu)分开的方法:用逗号将元素分开,用 | 号将表头和表尾分开。如:a,b,c 等价(dngji)于a|b,c 等价(dngji)于 a|b|c 等价(dngji)于a|b|c| 打印(d yn)表中元素的例子:domainslist=integer*predicateswrite_a_list(list)clauses write_a_list( ). write_a_list(H|T):-write(H),nl, write_a_list(T).goal write_a_list(1,2,3).第26页/共31页第二十七页,共31页。表元素(yun s)记数的例子: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).第27页/共31页第二十八页,共31页。domains list = integer*predicates add1(list, list)clauses add1(, ). /* boundary condition */ add1(Head|Tail, Head1|Tail1) :- /* separate the head */ /* from the rest of the list */ Head1= Head+1, /* add 1 to the first element */ add1(Tail, Tail1). /* call element with the rest of the list */goal add1(1,2,3,4,NewList).修改(xigi)表,对表中的每个元素加1为了将1加至空表上的所有元素,只需生成另一张空表。为了将1加至其它表上的所有元素,将1加至表头,并使它成为(chngwi)结果表的表头,然后将1加至表尾的每个元素,并使它成为(chngwi)新的表尾。第28页/共31页第二十九页,共31页。表合并(hbng):domains integerlist = integer*predicates append(integerlist, integerlist, integerlist)clauses append(, List, List). append(X|L1, List2, X|L3) :- append(L1, List2, L3).goal append(1,2,3,4,5,Newlist).第29页/共31页第三十页,共31页。4.6 文件(wnjin)与数据库Prolog 打开及关闭文件有8个内部(nib)谓词:openread谓词,打开(d ki)文件用于读操作。openwrite谓词,打开文件用于写操作。openappend谓词,打开文件,在文件尾拼加。openmodify谓词,打开文件用于读和写操作。closfile谓词,用于关闭指定的文件。readdevice谓词,重新设置当前读设备,或获取当前读设备的名字。writedevice谓词,重新设置当前写设备,或获取当前写设备的名字。第30页/共31页第三十一页,共31页。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!