版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
会计学1用于人工智能的Prolog语言会计学1用于人工智能的Prolog语言Prolog是一种逻辑程序设计语言,基于一阶谓词逻辑,是典型的叙述型语言(DeclarationLanguage)。
Prolog语言的特点:(1)建立在一阶谓词逻辑和归结原理基础上,有自动推理功能。(2)用Prolog设计应用程序时,仅需指明领域中各对象间的关系和决策规则,而应用这些知识的推理由Prolog完成。(3)Prolog应用程序,由数据库和规则库组成。(4)Prolog程序设计要做三件事,即说明事实、定义规则、提出问题。4.1归结原理与Prolog语言第1页/共31页4.1归结原理与Prolog语言第1页/共31页Prolog有三种形式的语句:1. B:-A1,A2,…,An.
含义是A1
A2...An
B,相当于~A1~A2…~An
B。可视作人工智能系统中的推理规则。也可将该句看作一个过程,B为过程头,是过程名,而{A1,A2,…,An}为过程体。2. A1,A2,…,An.
含义是A1
A2...An
F,相当于~A1~A2…~An,可视作推理的目标,或称目标子句。3. B.
含义是公式B无条件地为真。可视作已知的事实。x(M(x)R(x))M(“张三”)R(“张三”)如三段论:推理规则: R(X):-M(X).事实: M("张三").目标: R("张三").Prolog语句:第2页/共31页Prolog有三种形式的语句:1. B:-A1,A2,证明公式:((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子句。第3页/共31页证明公式:((M(X)R(X))M("张三"用Prolog证明三段论:推理规则:R(X):-M(X).事实: M("张三").目标: R("张三"). M("张三").完整的Prolog程序:predicates M(symbol) R(symbol)clauses R(X):-M(X). M("zhsan").goal R("zhsan").运行第4页/共31页用Prolog证明三段论:推理规则:R(X):-M(X).4.2家庭关系程序示例下图是一个表示家庭关系的实例:PamTomAnnBobLizPatJim parent(pam,bob). parent(tom,bob). parent(tom,liz). parent(bob,ann). parent(bob,pat). parent(pat,jim).用Prolog语句表示为:第5页/共31页4.2家庭关系程序示例下图是一个表示家庭关系的实例:Pa完整的Prolog程序:predicates parent(symbol,symbol)clauses parent(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).1.系统回答2.系统回答3.系统回答4.系统回答第6页/共31页完整的Prolog程序:predicates此程序可以回答5.谁是jim的祖父母?分析:程序中并没有直接的祖父母关系。此问题可分两步:(1)谁是jim的父母?假设是Y,(2)谁是Y的父母?假设是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页5.谁是jim的祖父母?分析:程序中并没有直接的祖父母关系。以上程序说明的几个重要观点:(1)在Prolog中定义一个关系是容易的,可以通过满足关系的n个对象来表达。(2)对程序中已定义的关系,用户可以轻而易举地询问Prolog系统。(3)关系的对象可以是常量(如:tom,ann),也可以是变量(如:X,Y)。(4)向系统提出问题,可由一个或多个目标组成。(5)一个Prolog程序由一些子句(clauses)组成。每个子句用句号结束。(6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。在肯定回答的情况下,说相应的目标是可满足的,而且这个目标成功了。否则,说目标不可满足,目标失败了。(7)如果有多个回答都满足目标,那么Prolog将尽可能多地回答。第8页/共31页以上程序说明的几个重要观点:(1)在Prolog中定义一个关Predicates parent(symbol)clauses parent(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).在示例程序中,添加有关性别的信息:第9页/共31页Predicatesmale(tom).在示例程序中,添加在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语句为:XYZparentoffspringoffspring第10页/共31页在Prolog中定义offspring(后代)关系对所有的X关于sister的规则定义:predicates parent(symbol,symbol) sister(symbol,symbol) female(symbol) male(symbol)
clauses parent(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).goal sister(X,pat).运行Pat的姐妹是谁?第11页/共31页关于sister的规则定义:predicates male(predicates parent(symbol,symbol) sister(symbol,symbol) female(symbol) male(symbol)
different(symbol,symbol)clauses parent(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):- X<>Y.goal sister(X,pat).改进的sister规则:运行Pat的姐妹是谁?第12页/共31页predicates male(bob).改进的sistermother规则:对所有的X和Y,X是Y的母亲,如果X是Y的父母,并且,X为女性。用prolog规则表示为:mother(X,Y):- parent(X,Y), female(X).predicates parent(symbol,symbol)
mother(symbol,symbol) female(symbol) male(symbol)clauses parent(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).goal mother(pat,X).Pat是谁的母亲?运行第13页/共31页mother规则:对所有的X和Y,X是Y的母亲,如果X是Y的4.3TurboProlog程序结构一个TurboProlog程序通常包括5个部分。如下:/* 注释 */domains
域说明database
数据库说明predicates
谓词说明goal
目标说明clauses
子句说明/* 注释 */1.域说明部分,说明谓词对象的数据类型。2.数据库说明部分,包含一些数据库谓词的定义,是说明用于动态数据库管理的谓词。如果程序不需要动态数据库,该部分可省略。3.谓词说明部分,定义程序中除内部谓词以外的所有谓词。4.在目标部分,说明程序的目标。一个程序目标可以由多个字目标复合而成。5.子句部分,列出全部事实和规则,也可看作是程序的静态数据。第14页/共31页4.3TurboProlog程序结构一个TurboPr/*程序名:Wordsmith文件名:*//*目标:查找并打印一单词的同义词或反义词。*/domains word,syn,ant=symbolpredicates synonym(word,syn) antonym(word,ant)goal synonym(brave,X), antonym(brave,Y), write("brave的同义词是:",X),nl, write("brave的反义词是:",Y),nl.clauses synonym(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程序分析第15页/共31页/*程序名:Wordsmith文件名/*程序名:Thesaurus文件名:*//*目标:建立一个打印单词的同义词和反义词的小词典。*/domains word,syn1,syn2,syn3, ant1,ant2,ant3=symbolpredicates synonym(word,syn1,syn2,syn3) antonym(word,ant1,ant2,ant3)goal synonym(brave,S1,S2,S3), antonym(brave,A1,A2,A3), write("brave的同义词是:"),nl, write(S1,",",S2,",",S3,","), write("brave的反义词是:"),nl, write(A1,",",A2,",",A3,"."),nl.
clauses synonym(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). 多元谓词、多元子句第16页/共31页/*程序名:Thesaurus文件名/*程序名:Presidents文件名:*//*目标:使用混合对象类型举例。*/domains name,party,state=symbol birth_year,year_in,year_out=integerpredicates president(name,party,state,birth_year,year_in,year_out)goal president(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.clauses president(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). 混合域的使用第17页/共31页/*程序名:Presidents文件/*程序名:Rlatives文件名:*//*目标:规则结构举例*/domains person=symbolpredicates male(person) female(person) parents(person,person,person) sister(person,person) who_is_the_sistergoal who_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).目标中使用规则第18页/共31页/*程序名:Rlatives文件名:domains man=symbolpredicates choice(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_choicegoal who_is_the_choice.clauses /*事实*/ choice(bill). choice(jim). choice(mark). choice(robert). choice(willy).
/*规则*/who_is_the_choice:- kathy_choice(Choice), write("Kathy'schoiceis",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).简单数据库第19页/共31页domains choice(tom).简单数据库第19页//*程序名:Europair文件名:*//*目标:否定谓词应用举例*/domains country=symbolpredicates euro_pair(country,country) border(country,country) find_non_border_pairgoal find_non_border_pair.clauses euro_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.
否定谓词的应用第20页/共31页/*程序名:Europair文件名:domains personal_library=book(title,author,publisher,year) collector,title,author,publisher=symbol year=integerpredicates collection(collector,personal_library)clauses collection(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)).复合对象的应用第21页/共31页domains复合对象的应用第21页/共31页personal_librarybooktitleauthorpublisheryear域结构图域第0层(结构)第1层(对象)DomainStructureDiagramcollectioncollectorbooktitleauthorpublisheryear谓词结构图PredicateStructureDiagram谓词(主函子)函子第0层第1层第2层第22页/共31页personal_librarybooktitleauthodomains personal_library=book(title,author,publication) publication=publication(publisher,year) collector,title,author,publisher=symbol year=integerpredicates collection(collector,personal_library)clauses collection(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))).三层域结构和四层谓词结构第23页/共31页domains三层域结构和四层谓词结构第23页/共31页personal_librarybooktitleauthorpublicationyear域结构图域第0层第1层DomainStructureDiagramcollectioncollectorbooktitleauthorpublisheryear谓词结构图PredicateStructureDiagram谓词(主函子)函子第0层第1层第2层publisher第2层publisher第3层第24页/共31页personal_librarybooktitleautho4.5表与递归表是含有任意数目的其他对象的一个对象。一个包含1,2,3的表可被写成:[1,2,3]表中的每个项被称为一个元素。在域说明中需要对表类型进行说明。如:domains integerlist=integer*predicates number(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[]第25页/共31页4.5表与递归表是含有任意数目的其他对象的一个对象。一个Prolog提供一种使表头和表尾明确分开的方法:用逗号将元素分开,用'
|'号将表头和表尾分开。如:[a,b,c]等价于[a|[b,c]]等价于[a|[b|[c]]]等价于[a|[b|[c|[]]]]打印表中元素的例子:domains list=integer*predicates write_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页Prolog提供一种使表头和表尾明确分开的方法:用逗号将表元素记数的例子:domains list=integer*predicates length_of(list,integer)clauses length_of([],0). length_of([_|T],L):- length_of(T,TailLength), L=TailLength+1.goal length_of([1,2,3],L). 第27页/共31页表元素记数的例子:domains第27页/共31页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加至表尾的每个元素,并使它成为新的表尾。第28页/共31页domains修改表,对表中的每个元素加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).第29页/共31页表合并:domains第29页/共31页4.6文件与数据库Prolog打开及关闭文件有8个内部谓词:openread谓词,打开文件用于读操作。openwrite谓词,打开文件用于写操作。openappend谓词,打开文件,在文件尾拼加。openmodify谓词,打开文件用于读和写操作。closfile谓词,用于关闭指定的文件。readdevice谓词,重新设置当前读设备,或获取当前读设备的名字。writedevice谓词,重新设置当前写设备,或获取当前写设备的名字。第30页/共31页4.6文件与数据库Prolog打开及关闭文件有8个内部谓会计学32用于人工智能的Prolog语言会计学1用于人工智能的Prolog语言Prolog是一种逻辑程序设计语言,基于一阶谓词逻辑,是典型的叙述型语言(DeclarationLanguage)。
Prolog语言的特点:(1)建立在一阶谓词逻辑和归结原理基础上,有自动推理功能。(2)用Prolog设计应用程序时,仅需指明领域中各对象间的关系和决策规则,而应用这些知识的推理由Prolog完成。(3)Prolog应用程序,由数据库和规则库组成。(4)Prolog程序设计要做三件事,即说明事实、定义规则、提出问题。4.1归结原理与Prolog语言第1页/共31页4.1归结原理与Prolog语言第1页/共31页Prolog有三种形式的语句:1. B:-A1,A2,…,An.
含义是A1
A2...An
B,相当于~A1~A2…~An
B。可视作人工智能系统中的推理规则。也可将该句看作一个过程,B为过程头,是过程名,而{A1,A2,…,An}为过程体。2. A1,A2,…,An.
含义是A1
A2...An
F,相当于~A1~A2…~An,可视作推理的目标,或称目标子句。3. B.
含义是公式B无条件地为真。可视作已知的事实。x(M(x)R(x))M(“张三”)R(“张三”)如三段论:推理规则: R(X):-M(X).事实: M("张三").目标: R("张三").Prolog语句:第2页/共31页Prolog有三种形式的语句:1. B:-A1,A2,证明公式:((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子句。第3页/共31页证明公式:((M(X)R(X))M("张三"用Prolog证明三段论:推理规则:R(X):-M(X).事实: M("张三").目标: R("张三"). M("张三").完整的Prolog程序:predicates M(symbol) R(symbol)clauses R(X):-M(X). M("zhsan").goal R("zhsan").运行第4页/共31页用Prolog证明三段论:推理规则:R(X):-M(X).4.2家庭关系程序示例下图是一个表示家庭关系的实例:PamTomAnnBobLizPatJim parent(pam,bob). parent(tom,bob). parent(tom,liz). parent(bob,ann). parent(bob,pat). parent(pat,jim).用Prolog语句表示为:第5页/共31页4.2家庭关系程序示例下图是一个表示家庭关系的实例:Pa完整的Prolog程序:predicates parent(symbol,symbol)clauses parent(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).1.系统回答2.系统回答3.系统回答4.系统回答第6页/共31页完整的Prolog程序:predicates此程序可以回答5.谁是jim的祖父母?分析:程序中并没有直接的祖父母关系。此问题可分两步:(1)谁是jim的父母?假设是Y,(2)谁是Y的父母?假设是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页5.谁是jim的祖父母?分析:程序中并没有直接的祖父母关系。以上程序说明的几个重要观点:(1)在Prolog中定义一个关系是容易的,可以通过满足关系的n个对象来表达。(2)对程序中已定义的关系,用户可以轻而易举地询问Prolog系统。(3)关系的对象可以是常量(如:tom,ann),也可以是变量(如:X,Y)。(4)向系统提出问题,可由一个或多个目标组成。(5)一个Prolog程序由一些子句(clauses)组成。每个子句用句号结束。(6)对一个问题的回答是肯定的或者是否定的,取决于相应的目标是否满足。在肯定回答的情况下,说相应的目标是可满足的,而且这个目标成功了。否则,说目标不可满足,目标失败了。(7)如果有多个回答都满足目标,那么Prolog将尽可能多地回答。第8页/共31页以上程序说明的几个重要观点:(1)在Prolog中定义一个关Predicates parent(symbol)clauses parent(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).在示例程序中,添加有关性别的信息:第9页/共31页Predicatesmale(tom).在示例程序中,添加在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语句为:XYZparentoffspringoffspring第10页/共31页在Prolog中定义offspring(后代)关系对所有的X关于sister的规则定义:predicates parent(symbol,symbol) sister(symbol,symbol) female(symbol) male(symbol)
clauses parent(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).goal sister(X,pat).运行Pat的姐妹是谁?第11页/共31页关于sister的规则定义:predicates male(predicates parent(symbol,symbol) sister(symbol,symbol) female(symbol) male(symbol)
different(symbol,symbol)clauses parent(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):- X<>Y.goal sister(X,pat).改进的sister规则:运行Pat的姐妹是谁?第12页/共31页predicates male(bob).改进的sistermother规则:对所有的X和Y,X是Y的母亲,如果X是Y的父母,并且,X为女性。用prolog规则表示为:mother(X,Y):- parent(X,Y), female(X).predicates parent(symbol,symbol)
mother(symbol,symbol) female(symbol) male(symbol)clauses parent(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).goal mother(pat,X).Pat是谁的母亲?运行第13页/共31页mother规则:对所有的X和Y,X是Y的母亲,如果X是Y的4.3TurboProlog程序结构一个TurboProlog程序通常包括5个部分。如下:/* 注释 */domains
域说明database
数据库说明predicates
谓词说明goal
目标说明clauses
子句说明/* 注释 */1.域说明部分,说明谓词对象的数据类型。2.数据库说明部分,包含一些数据库谓词的定义,是说明用于动态数据库管理的谓词。如果程序不需要动态数据库,该部分可省略。3.谓词说明部分,定义程序中除内部谓词以外的所有谓词。4.在目标部分,说明程序的目标。一个程序目标可以由多个字目标复合而成。5.子句部分,列出全部事实和规则,也可看作是程序的静态数据。第14页/共31页4.3TurboProlog程序结构一个TurboPr/*程序名:Wordsmith文件名:*//*目标:查找并打印一单词的同义词或反义词。*/domains word,syn,ant=symbolpredicates synonym(word,syn) antonym(word,ant)goal synonym(brave,X), antonym(brave,Y), write("brave的同义词是:",X),nl, write("brave的反义词是:",Y),nl.clauses synonym(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程序分析第15页/共31页/*程序名:Wordsmith文件名/*程序名:Thesaurus文件名:*//*目标:建立一个打印单词的同义词和反义词的小词典。*/domains word,syn1,syn2,syn3, ant1,ant2,ant3=symbolpredicates synonym(word,syn1,syn2,syn3) antonym(word,ant1,ant2,ant3)goal synonym(brave,S1,S2,S3), antonym(brave,A1,A2,A3), write("brave的同义词是:"),nl, write(S1,",",S2,",",S3,","), write("brave的反义词是:"),nl, write(A1,",",A2,",",A3,"."),nl.
clauses synonym(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). 多元谓词、多元子句第16页/共31页/*程序名:Thesaurus文件名/*程序名:Presidents文件名:*//*目标:使用混合对象类型举例。*/domains name,party,state=symbol birth_year,year_in,year_out=integerpredicates president(name,party,state,birth_year,year_in,year_out)goal president(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.clauses president(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). 混合域的使用第17页/共31页/*程序名:Presidents文件/*程序名:Rlatives文件名:*//*目标:规则结构举例*/domains person=symbolpredicates male(person) female(person) parents(person,person,person) sister(person,person) who_is_the_sistergoal who_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).目标中使用规则第18页/共31页/*程序名:Rlatives文件名:domains man=symbolpredicates choice(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_choicegoal who_is_the_choice.clauses /*事实*/ choice(bill). choice(jim). choice(mark). choice(robert). choice(willy).
/*规则*/who_is_the_choice:- kathy_choice(Choice), write("Kathy'schoiceis",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).简单数据库第19页/共31页domains choice(tom).简单数据库第19页//*程序名:Europair文件名:*//*目标:否定谓词应用举例*/domains country=symbolpredicates euro_pair(country,country) border(country,country) find_non_border_pairgoal find_non_border_pair.clauses euro_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.
否定谓词的应用第20页/共31页/*程序名:Europair文件名:domains personal_library=book(title,author,publisher,year) collector,title,author,publisher=symbol year=integerpredicates collection(collector,personal_library)clauses collection(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)).复合对象的应用第21页/共31页domains复合对象的应用第21页/共31页personal_librarybooktitleauthorpublisheryear域结构图域第0层(结构)第1层(对象)DomainStructureDiagramcollectioncollectorbooktitleauthorpublisheryear谓词结构图PredicateStructureDiagram谓词(主函子)函子第0层第1层第2层第22页/共31页personal_librarybooktitleauthodomains personal_library=book(title,author,publication) publication=publication(publisher,year) collector,title,author,publisher=symbol year=integerpredicates collection(collector,personal_library)clauses collection(kahn,book("TheComputerandtheBrain", "vonNeumann", publication("YaleUniversityPress",1958))). collection(kahn,book("SymbolicLogic",
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2-Deoxy-2-fluoroadenosine-5-O-triphosphate-2-Fluoro-dATP-生命科学试剂-MCE
- 3.2 通过Modbus TCP采集数据
- 2025 六年级地理下册巴西的工业部门课件
- 2026八年级下语文社戏第二课时精读
- 乌镇小吃活动方案策划(3篇)
- 六一谢幕活动策划方案(3篇)
- 同城啤酒活动策划方案(3篇)
- 外墙防火施工方案(3篇)
- 2026一年级数学 人教版数学乐园期末复习
- 成都夜宵活动策划方案(3篇)
- (一模)东北三省三校2026年高三第一次联合模拟考试语文试卷(含答案详解)
- 2026河南郑州建设集团所属公司社会招聘工作人员44名笔试备考题库及答案解析
- 2026年春五年级下册数学教学计划(附教学进度表)
- 现在完成时复习课课件+2025-2026学年外研版八年级英语下册
- 初中地理《中国的地理差异》单元深度复习教学设计(以‘秦岭淮河’线为例)
- 2025年青岛农商银行春招笔试及答案
- 绍兴2025年浙江绍兴市政务服务办公室招聘政务服务专员6人笔试历年参考题库附带答案详解
- 大疆社招在线测评题目
- 菏泽医专综评试题及答案
- 雨课堂学堂在线学堂云《船》单元测试考核答案
- GB/T 9944-2025不锈钢丝绳
评论
0/150
提交评论