版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2020/9/16,1,第六章 PROLOG语言,课程的基本内容及要求: 1基本内容 (1)语言的发展及特点; (2)语言的数据和程序结构,及其内部谓词; (3)语言的搜索策略例化与匹配、回溯控制、谓词!的作用等; (4)语言的程序设计。 2要求 (1)提供PROLOG语言,及其部分典型程序例子,以供同学们自学 (2)要求了解PROLOG语言,学会简单的程序设计 1-5,7节(学时)重点:4节,5节,2020/9/16,2,第六章 PROLOG语言,Prolog语言是两种最主要的人工智能程序设计语言之一(另一重要语言是LISP)。因此,了解掌握Prolog语言对计算机学者,特别是从事人工智能和
2、新一代计算机的研究人员是十分重要的 本章将对Prolog语言作一描述,并讨论几个例子,使读者基本了解Prolog语言及其特点,并能编写一般的Prolog程序,2020/9/16,3,第六章 PROLOG语言 6 Prolog语言概述,1 Prolog语言的发展 Prolog(Programming in logic)语言是一种以逻辑推理为基础的逻辑型程序设计语言 陈述性语言而不是过程性 思想最早(70年代初)在英国爱丁堡大学由RKowalski首先提出,并由MVan Emden作了模型示范1972年,Alain Colmeraner及其研究小组在法国马塞大学研制成功了第一个Prolog系统19
3、77年,英国爱丁堡大学的DWarren 开发了DEC10 Prolog语言,使之有了进一步地完善 移植到个人计算机: TURBO Prolog软件 TURBO Prolog Toolbox,2020/9/16,4,第六章 PROLOG语言 6 Prolog语言概述,1 Prolog语言的发展 Prolog语言已广泛应用于符号计算的许多应用场合 其中包括:关系数据库、专家系统、数理逻辑、抽象问题求解、定理证明和语义学、自然语言理解、结构设计、位置规划和逻辑学、符号方程解决、编译程序编制、生物化学结构、生理学分析和药物设计,涉足了许多人工智能领域,2020/9/16,5,第六章 PROLOG语言
4、6 Prolog语言概述,2 Prolog语言的特点 Prolog语言求解问题时,要求程序员描述所解问题中的对象和反映它们之间关系的某些已知事实,描述和定义各对象和它们之间关系的某些规则 强调描述对象(和事实)之间的逻辑关系,程序员一般不必要告诉计算机运算执行的先后次序 因此,从只需描述问题本身,而不必描述求解问题的详细计算步骤这一点上说,Prolog语言是更高级的语言,2020/9/16,6,第六章 PROLOG语言 6 Prolog语言概述,2 Prolog语言的特点 Prolog语言是一种不寻常但又非常简单的语言 只需回答:在问题中会出现什么形式的事实和关系?回答有关的哪些关系为真? P
5、rolog语言所用的方法是规定与问题有关的已知事实和关系,并无必要把问题的解看成是一步接着一步的指令序列,2020/9/16,7,第六章 PROLOG语言 6 Prolog语言概述,2 Prolog语言的特点 Prolog语言编写程序时,计算机如何进行计算? 部分地决定于Prolog语句中所固有的逻辑关系,也是部分地取决于Prolog语言从给定的事实中可以推论出来的新事实,以及部分地取决于由使用者提供的直接的控制信息,2020/9/16,8,第六章 PROLOG语言 6 Prolog语言概述,2 Prolog语言的特点 “项”的数据结构不但所有的数据,而且Prolog程序都是由项构成的 Pro
6、log程序由一组子句组成,其子句或者表示关于给定信息的事实,或者表示规则 规则或是说明问题的解与给定事实如何相关,或是说明如何从给定事实中推论出解 因此,可以把使用Prolog语言看成是朝着按逻辑编写程序的最终目标前进的第一步,2020/9/16,9,第六章 PROLOG语言 6 Prolog语言概述,2 Prolog语言的特点 (1)Prolog语言是一种描述性语言,只需描述待解问题中的对象及它们之间关系的一些已知事实和规则 强调描述对象之间的逻辑关系,而不必告诉计算机运算执行的先后次序,也即,告诉计算机“做什么”,而不是像普通程序设计语言那样告诉计算机“如何做” (2)Prolog语言的数
7、据和程序结构统一 “项” 所有的程序和数据均由项构成,并且都是树型结构 (3)Prolog语言能够自动实现模式匹配和回溯 (4)递归是Prolog语言的重要特点之一 一个大的数据结构常能由一小的程序来处理 (5)语法简明 仅有三种句型,语法规则比较简单,2020/9/16,10,第六章 PROLOG语言 6 Prolog语言的结构,1 数据结构 1常量 常量是数据结构的基本组成部分,用来对特定对象及关系的命名 (1)整数 18,2000 (2)原子 标识符aBC12、is_ 符号 Prolog语言规定的 (3)字符集 abz,0123456789,2020/9/16,11,第六章 PROLOG
8、语言 6 Prolog语言的结构,1 数据结构 2变量 变量是用来表示我们还无法知道且需要Prolog程序来确定的客体 变量用变量名表示,变量名与标识符相似,所不同的是以大写字母或下横线开头 Variable、_ansure Prolog语言中,有一个特殊的变量,我们不需要知道它是什么,也用不着它的具体名字,只是表示在那留出一位置,这被称为匿名变量用单一的下划线来表示之 _,2020/9/16,12,第六章 PROLOG语言 6 Prolog语言的结构,1 数据结构 3结构 结构是Prolog语言中的第三类数据结构,用于构造Prolog数据对象 一个结构是一个单一的客体,它由一个函子和一个或多
9、个称为分量的项的序列所组成: 函子(分量1,分量2,分量n),其中的分量结构仍可以是结构 例:描述事实“Mary 住zhongshan路120号”: Person(name(mary),address(street(zhongshan),number(120),2020/9/16,13,第六章 PROLOG语言 6 Prolog语言的结构,1 数据结构 3结构 常用的结构形式: (1)函数(分量1,分量2,分量n) (2)表有序分量 (3)表达式中缀形式 Prolog语言提供了统一的数据结构项(term)在Prolog中,无论是程序还是数据,都是由项所构成 项的定义: = | | | “ (”
10、 “ )” (每一个项书写为一个字符串),2020/9/16,14,第六章 PROLOG语言 6 Prolog语言的结构,2 程序结构 一个完整的PROLOG程序包括: 常量段(constants) 领域段(domains) 数据库段(database) 谓词段(predicates) 目标段(goal) 子句段(clauses) 程序结构非常简单,由三个部分组成: 事实规则询问,2020/9/16,15,第六章 PROLOG语言 6 Prolog语言的结构,2 程序结构 1事实 事实用来说明有关客体及客体之间的相互关系 如John喜欢Mary:likes(john,mary) 谓词 客体 自
11、变量X 谓词和确定的客体(常量)必须以小写字母开头,而变量客体用大写字母开头,客体间用逗号“,”分开,用一对圆括号括住,最后用“.”终结 自变量的个数是任意的 语句意义的解释由编程员所确定 如likes(john,mary),可解释成John喜欢Mary,也可解释成Mary喜欢John,2020/9/16,16,第六章 PROLOG语言 6 Prolog语言的结构,2 程序结构 2规则 规则是关于客体及其关系的一般陈述,表明某些关系的成立要依赖于其他一些关系的成立 规则由规则头和规则体所组成,其间用符号“:”联接 符号“:”即表示“如果”,规则用“.”结尾 如:“如果某人是学生,则John就喜
12、欢该人”: likes(john,X):student(X) 头(结论) “如果” 体(前提) 表示如果student(X)成立,则likes(john,X)就成立,2020/9/16,17,第六章 PROLOG语言 6 Prolog语言的结构,2 程序结构 2规则 规则的一般形式为: p:p1,p2,p3,pn 其中p1pn均为命题。在此,逗号“,”即是合取(或并且)的意思 规则的语义是:如果“p1p2pn”为真,则p就为真,即规则头部就为真 值得注意的是规则的解释:在一条规则中,所有相同的变量代表了相同的客体,而在规则的不同使用时,变量可以代表不同的客体。但规则的同一次使用中,对一变量的解
13、释必须完全一致,2020/9/16,18,第六章 PROLOG语言 6 Prolog语言的结构,2 程序结构 可以把Prolog程序看作是事实和规则的一个库称为数据库或知识库 Prolog系统的任务就是依据知识库中的知识(事实和规则的集合)来回答用户的问题 编写Prolog程序,实际上就是提供所需要的事实和规则,Prolog系统能使计算机去利用事实和规则及自身所带有的推理方法,从一些事实推理出另一些事实,2020/9/16,19,第六章 PROLOG语言 6 Prolog语言的结构,2 程序结构 3目标 Prolog语言是一种可会话式语言 执行一个Prolog程序实际上就是进行人机对话,在将事
14、实和规则存入数据库或知识库中后,就可以向系统询问一些有关它们的问题,而问题就是系统求解的目标 Prolog语言的询问的一般形式为: ?p1,p2,pn 其中“?”是Prolog语言的询问的特殊符号,p1,p2,pn 的意义与规则中的意义相同 询问的语义是:“p1p2pn是为真吗?”,2020/9/16,20,第六章 PROLOG语言 6Prolog语言的内部谓词,内部谓词是由Prolog系统预先提供的,而不是由编程者自定义的谓词 常用的 可不加定义地直接利用 例化是指一个变量去代表某个确定的客体,2020/9/16,21,第六章 PROLOG语言 6Prolog语言的内部谓词,1 比较类 具有
15、两个自变量中缀形式的内部谓词 结果为True或False 2 表达式类 表达式求值建立表达式 优先级 3 输入输出类 系统从输入流输入一个项、一个字符或一个文件,或把一个项、一个字符或一个文件输出到输出流 geto(X) get(X) skip(X) read(X) put(X) nl tab(X) write(X) display(X) op(X,Y,Z) 4 文件操作类 改变当前输入流、输出流的谓词 see(X) seeing(X) seen tell(X) telling(X) told,2020/9/16,22,第六章 PROLOG语言 6Prolog语言的内部谓词,5 控制谓词类 t
16、ure该目标永远成功 fail该目标永远失败 使用FAIL可以强制回溯,从而得到问题的所有解 repeat repeat提供了通过回溯来得到多个解的一种方法 !(cut)Prolog语言的控制搜索过程的一个非常重要的内部谓词,它允许编程员告诉Prolog系统,当对已满足的目标的链进行回溯时,前面的那些选择不需要重新考虑 穿过“!”的回溯是不可能的 截断谓词!的副作用是改变了以后的回溯线路 如预知,则加快搜索速度,节约内存空间,2020/9/16,23,第六章 PROLOG语言 6Prolog语言的内部谓词,6 复杂目标类 call(X)X被例化为一个定义为目标的项 如果X成功,则call(X)
17、成功;如果X失败,则call(X)失败 使用call可以在编制程序时,调用还未知的目标函子 not(X)将X看作为一个目标 当X失败,not(X)失败 X,Y谓词中“,”是“并且”的意义 X;Y谓词中“;”是“或”的意义,2020/9/16,24,第六章 PROLOG语言 6Prolog语言的内部谓词,7 项类 var(X) 当X为一未例化的变量,var(X)为True nonvar(X) 当X不是未例化变量时,nonvar(X)为False atom(X) 当X为原子时,目标atom(X)成功 integer(X) X代表一个整数,则目标成功 atomic(X) 当X为一个原子或一个整数时,
18、则目标成功,2020/9/16,25,第六章 PROLOG语言 6Prolog语言的内部谓词,8 结构分量类 functor(T,F,N) 该谓词表示T是一个以F为函子,有N个分量的结构 arg(N,T,A) 如果T的第N个分量是A,则目标成功 X = L 该谓词表示L是由结构X的函子及分量构成的表 name(A,L) 该谓词表示L由组成A的字符(ASCII码表示)所构成,2020/9/16,26,第六章 PROLOG语言 6Prolog语言的内部谓词,9 项维护类(动态数据库) consult(X)把文件X中的所有项加到数据库的末尾 reconsult(X)把从文件X上读入的项取代原来数据库
19、中具有相同谓词名的项,可用以修正程序的错误 asserta(X) 把子句X加入到数据库中,放在与X具有相同谓词和变量数的项之前 assertz(X) 与asserta(X)基本相同,所不同的是把加入的项放在与X具有相同谓词和变量数的项之后 retract(X)删除数据库中第一个与X匹配的项 retractall(X)删除数据库中所有与X匹配(头匹配)的项 listing(A)A例化为一原子 clause(X,Y)X和Y分别与数据库中一规则的头和体匹配时为Ture,2020/9/16,27,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,Prolog语言是一种描述性的语言 用Pr
20、olog语言进行程序设计时,编程员只需描述待解问题中的有关事物及其它们之间关系的已知事实和规则,也就是只需告诉计算机“做什么”,而不需指出“如何做” Prolog系统具有模式匹配、回溯等自动搜索功能 当用户建立了数据库或知识库后,就可以直接向Prolog系统询问有关问题。Prolog系统靠自身的模式匹配和回溯等功能来自动搜索目标,从而来回答用户的问题,2020/9/16,28,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略, 例化与匹配 匹配: (1) 一个未例化变量可与任何客体匹配,例化结果是该变量代表可匹配的客体 (2) 一个常量只能与自己匹配 (3) 如两个函子一致,且分
21、量个数相等,当对应分量均相匹配时,则这两个结构可匹配 (4) 两事实匹配是它们的谓词相同,且对应自变量相匹配 (5) 与规则匹配实际上只是与规则的头匹配,而规则头的匹配则与事实匹配相同,2020/9/16,29,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略, 例化与匹配 例化: 一个变量已例化,表示该变量已代表了某个确定的客体;而一个变量未例化,则表示该变量在某一时刻尚未代表某个确定的客体 开始使用子句项时,所有它的变量都是未例化的,2020/9/16,30,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略, 例化与匹配 例:设有知识库 play(mary,sw
22、im) play(mary,tennis) play(john,tennis) play(john,football) 询问 ?play(mary,swim) 根据匹配原则能与第一个事实play(mary,swim)相匹配,因此,该问题得到满足,于是,Prolog系统便回答yes 如询问?play(john,X)(X是一个未例化的变量) 问题首先与第三个事实play(john,tenis)匹配,则目标满足,于是X被例化为tennis,系统便可回答X = tennis,并在知识库的此处作一标记 用户输入有“;”表示继续求解:从知识库标记处再继续向下搜索(同时应将X解脱使X恢复成未例化的变量) 问
23、题又与第四个事实play(john,football)匹配,此时目标再一次满足,X又被例化为football,标记则被移到此处,系统便可回答X = football 假如再输入“;”继续求解,则又从标记处开始搜索。可以看出,此时已没有可匹配的事实回答no,2020/9/16,31,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,2 回溯控制 Prolog系统重复地试图满足和重新满足询问问题及其派生的目标就是回溯 Prolog系统能自动地完成回溯功能 例:设有知识库 play(mary,swim) play(mary,tenis) play(john,tenis) play(jo
24、hn,football) 询问?play(mary,X),play(john,X) 这是一个带有联结词“,”的询问:“,”是“”合取的意思,因此要满足整个目标,必须分别满足play(mary,X)和play(john,X)这两个子目标,2020/9/16,32,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,2 回溯控制 搜索的过程(注意回溯步骤): (1) 试图满足子目标play(mary,X),X是未例化变量搜索知识库,与子句(1)匹配,于是,该子目标成功,X被例化为swim,同时在子句(1)处作标记(标记的目的是当需重新满足该目标时,系统将控制从此标记处开始搜索) (2)
25、 由于X已例化为swim,因此第二个子目标为play(john,swim)。现试图满足该子目标系统搜索知识库,不存在与此目标相匹配的子句,因此此目标失败 (3) 当后一个目标失败后,必须重新试图满足前一个目标。由于play(john,swim)失败,于是系统试图重新满足前一个目标play(mary,X):系统可控制从标记处子句(1)开始搜索,同时X被解脱,重新成为未例化变量,这就是回溯 (4) 系统从子句(1)以后搜索。目标play(mary,X)与事实play(mary,tenis)匹配,于是目标又成功,X被例化成tenis,同时在子句(2)处作标记以便回溯时使用 (5)系统又转向第二个目标
26、进行搜索。由于X被例化为tenis,只需满足目标play(john,tenis)(注意:这里系统并不是重新满足,而是再一次进入第二个目标(在询问中是从左到右的,而回溯则是从右到左)搜索从知识库的第一行开始找到匹配的事实子句(3),目标成功。由于第二个目标满足了,系统也在子句(3)处作一标记。(注意:子句(2)和子句(3)两处的标记是不同的,因为系统要在可与任何一个(子)目标满足的子句(事实和规则)处作一标记) (6) 两个子目标都满足,则整个目标play(mary,X) play(john,X)也就被满足了,X被例化为 tennis这样系统为询问找到一个解:X = tennis,2020/9/
27、16,33,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,2 回溯控制 如用户键入分号“;”要求继续求解,结果会是怎样呢? “;”将引起回溯,试图重新满足第二个子目标play(john,tenis) 该子目标中没有其他无例化的变量(X是由第一个子目标例化的,不能在此解脱)系统将从子句(3)以后开始搜索,可以发现,再无匹配的事实,于是该目标失败,由此又引起回溯 系统试图再重新满足第一个子目标play(mary,X)(Prolog系统应在此解脱X),并从第一目标的标记处(子句(2)以后开始搜索可看出,不能找到匹配的事实,于是第一子目标也失败,因而整个目标也就失败 由于系统找不到更
28、多的解,因此系统只有回答no,2020/9/16,34,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,2 回溯控制搜索过程 ?play(mary,X),play(john,X) 对第一个子目标从头搜索与子句(1)匹配例化X swim,及play(john,swim) (置标记)对第二个子目标从头搜索无子句匹配 失败回溯 解脱X,恢复 play(mary,X) 对第一个子目标从标记处搜索与子句(2)匹配例化X tennis,及play(john,tennis) (置标记)对第二个子目标从头搜索与子句(3)匹配 成功。解为X = tennis (置标记) 键入分号“;” 回溯 p
29、lay(john,tennis) 对第二个子目标从标记处搜索无子句匹配 失败回溯 解脱X 恢复 play(mary,X) 对第一个子目标从标记处搜索无子句匹配“ ”表示回溯 失败回溯 已回溯到顶 Prolog回答no,2020/9/16,35,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,3 搜索策略 系统对一个目标进行处理的步骤: (1) 从左到右依次满足联结中的各子目标 (2) 对任何一个子目标,第一次搜索时,总是从知识库的顶即第一行子句开始 如直接可与事实匹配,则这一子目标成功,并完成:在知识库中的可匹配事实处设置标记(为回溯时所用)及例化相应的变量 如与某规则的头可匹
30、配,则设置标记并再从左到右去设法满足该规则的体所描述的各子目标 没有任何事实或规则与之匹配,则该子目标失败。如有左邻,则试图重新满足左邻目标,即回溯;否则,系统便可结束搜索 回溯时,需恢复例化的变量即解脱,并从相应的标志以后开始搜索,2020/9/16,36,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,3 搜索策略 【例61】前例的扩充 play(mary,swim) play(mary,tenis) play(john,tenis) play(john,football) diff(mary,john) likes(X,Y):play(X,Z),play(Y,Z),dif
31、f(X,Y) 询问:?likes(mary,X),2020/9/16,37,第六章 PROLOG语言 6. 4 Prolog语言的搜索策略,3 搜索策略【例61】处理步骤 (1) 目标问题只能与仅有的规则的头likes匹配,因此规则中的X被例化为mary(注意,问题中的X和规则中的Y均未例化可称这两变量为共享(共享是:一旦其中一个变量被例化为某个明确的客体,则另一个也被例化为这一客体) (2) 当满足这一规则时,则可认为原来的目标被分解为规则的体即三个子目标应依次满足这三个子目标 首先需满足子目标play(mary,Z):系统从头开始搜索知识库,与第一个事实匹配,则该子目标成功,并作标记在第一
32、个事实的子句上,Z被例化为swim (3) 下一个子目标即是play(Y,swim):从知识库的顶开始搜索,也与第一个事实匹配,则该子目标被满足,并作标记,Y被例化为mary (4) 再下一个子目标是diff(mary,mary):该子目标失败,便引起回溯系统试图重新满足前一个子目标play(Y,swim),Y被恢复成未例化变量 (5) 这次从知识库标记处开始搜索:找不到与之匹配的事实,因此子目标play(Y,swim)失败,于是又引起回溯系统试图重新满足第一个子目标play(mary,Z),Z被恢复成未例化变量 (6) 从知识库标记处开始搜索,该子目标可与第二个事实匹配,则该子目标又一次成功
33、,并作标记,Z被例化为tenis (7) 进入下一个子目标play(Y,tenis)(注意这是从左到右地搜索匹配,而不是回溯),从知识库的顶开始搜索:发现子目标与第三个事实匹配,则成功,并Y被例化为john (8) 再进入下一个子目标diff(mary,john),很明显,子目标满足 (9) 规则体的所有子目标均已成功,那么本规则即成功。因为问题中的X和规则中的Y共享,因此,X也被例化为john。最后,系统给出答案X = john,2020/9/16,38,第六章 PROLOG语言 6谓词!的讨论,1 谓词!的作用 谓词!是一种能影响Prolog回溯方式的专门机构 用户可以利用!来告诉Prol
34、og系统,当要回溯前面一串已满足的目标时,就不必再考虑那些目标的其它可选择分枝 一个目标的成功,有三种情况: (1) 与一个事实匹配; (2) 与一个规则的头匹配,且该规则的体的所有子目标成功; (3) 系统的内部谓词执行成功 一个目标的失败,有四种情况: (1) 无子句可以匹配; (2) 与一个规则的头匹配,但该规则的体执行失败; (3) 系统的内部谓词执行失败; (4) 一度执行成功,但而后在执行中发生回溯,又没有别的选择分枝,2020/9/16,39,第六章 PROLOG语言 6谓词!的讨论,1 谓词!的作用 因为用户能事先知道这种不必要的回溯对求解毫无意义。因此,在Prolog程序中合
35、理地使用!,具有两个优点: (1)Prolog程序可以运行得更快,因为它将不会浪费时间去试图满足那些能事先知道不可能导致解答的目标; (2)程序可以占有较少的计算机存贮空间,因为Prolog系统不必为它以后的搜索去记录那些对求解毫无帮助的回溯点的信息,2020/9/16,40,第六章 PROLOG语言 6谓词!的讨论,1 谓词!的作用 从语法上讲,在一规则中,谓词!就好象是一目标,它是没有变元的谓词 作为一个目标,它将立即成功,但不能被重新满足,其副作用是改变这以后的回溯方式 所谓不能被重新满足,是指当回溯到达这一目标时,不可能再找另一个满足目标的成功解换句话说,企图再满足它时能引起立即失败,
36、2020/9/16,41,第六章 PROLOG语言 6谓词!的讨论,1 谓词!的作用 Prolog搜索的与/或树 目标 子句1 子句2 g1 g2 ! g4 c1 c2 c3 c4 c5,2020/9/16,42,第六章 PROLOG语言 6谓词!的讨论,1 谓词!的作用 Prolog搜索: 设在匹配子句1时,子目标g1匹配子句c1时成功,子目标g2匹配子句c4成功,谓词!也成功,但在满足子目标g4时失败 按照Prolog的正常搜索方法,当子目标g4失败后,将引起回溯。如不存在谓词!,则首先要求子目标g2寻找另一个可能匹配成功的子句c5。如果g2失败,Prolog将回溯到子目标g1,对子句c2
37、、c3进行匹配检验 因为有了谓词!,它表示相关目标不可重新被满足且立即失败,因此改变了回溯工作方式。Prolog系统将不对c5、c2、c3作进一步的匹配检验,这就好象把虚线部分的枝条都已剪除了 由此产生从父目标(匹配子句1)到子目标g2之间的所有目标都不可重新满足,2020/9/16,43,第六章 PROLOG语言 6谓词!的讨论,1 谓词!的作用 (1)确定某规则的使用 例如:r1: a,b,! r2: c r1,r2是同一谓词的两个子句,其中只有一个子句被选用 谓词!表示系统已为一特定的目标找到了合适的正确规则。在此谓词!的作用是让Prolog在搜索时选取确定的规则 (2)和谓词fail联
38、用 例如:r1: a,!,fail r2: b,!,fail r3: c r1,r2,r3是同一谓词的三个子句,谓词!和fail 联用的含义是“对于给定的目标不用再求其他的解,目标肯定是失败了。” (3)结束“生成测试”,2020/9/16,44,第六章 PROLOG语言 6谓词!的讨论,2 用法及举例 谓词!的第一种用法称为分情况选择 当情况1做动作1 当情况n做动作n 否则 做动作n+1 样本写法将是: sample(case1,X,): !,action1(X,) sample(casen,X,): !,actionn(X,) sample(others,X,):catch_all_ac
39、tionnl(X,) 谓词!确定仅在分支情况中选择一种,不可能再有第二 当不能够通过指明规则头的不同模式来区别所有可能的情况时(交集不为空),则可以利用谓词!,让Prolog在搜索时选取确定的规则称为确认一规则的选择用法,2020/9/16,45,第六章 PROLOG语言 6谓词!的讨论,2 用法及举例 谓词!的第二种用法是与另一个内部谓词fail合用 (谓词fail像内部谓词!一样没有变元) 谓词fail作为一个目标总是失败并引起回溯 当谓词fail的前面是谓词!时,则由于谓词!的作用将改变正常的回溯方式,使匹配含该谓词!的规则的父目标立刻失败(因为从父目标到谓词!之间的所有目标均不可重新满
40、足) 本谓词!的用法称作cut-fail组合用法或谓词!的排除型选择用法,2020/9/16,46,第六章 PROLOG语言 6谓词!的讨论,2 用法及举例 谓词!的第三种用法是把谓词!放在产生器和测试器的后面 典型的模式是: example(X): generate(X),test(X),! 产生器generate(X)不断地产生一些值,每产生一个值,测试器就立即测试该值是否满足条件。如不满足,则回溯到产生器,由产生器产生下一个值再测试,直至找到一个满足条件的解 此时执行到达谓词!,指明已找到唯一需要的解,则没有必要或不可能再找其它的解 本谓词!的用法称作单解性选择用法,2020/9/16,47,第六章 PROLOG语言 6谓词!的讨论,2 用法及举例 谓词!主要用于三个地方: (1)需告诉Prolog系统,它对一特定的目标已经找到了正确的规则被称为分情况选择 (2)要告诉Prolog 系统,应立即失败一特定的目标,不必再试其他可能的选择。这是利用谓词!和谓词fail的组合来实现的称之为排除性选择 (3)要终结一个需通过回溯产生其它可选择的解。这时谓词!指明已找到唯一需要的解,没有必要或不可能再找其他的解被称为单解性选择,2020/9/16,48,第六章 PROLO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年天津市语文中考考前仿真模拟卷(含答案)
- 押题密卷 2027年江苏省英语九年级北师大版高分冲刺模拟卷(含答案)
- 2027年天津市英语九年级专题强化卷(含答案)
- 厚积薄发 2026-2027学年第一学期高一生物人教版10月月考试卷(含答案)
- 温故知新 2026-2027学年第一学期初二道德与法治部编版上学期期中测试卷(含答案)
- 2027年贵州省语文中考考前提分模拟卷(含答案)
- 夯实基础 2026年秋季七年级道德与法治部编版上学期期中测试卷(含答案)
- 2027年河北省英语中考人教版专项训练卷(含答案)
- 2026 湖南事业编水利岗 高频考题试卷 含答案
- 2026 综合岗面试高频题集锦 含答案含解析
- 2026年部编版新教材道德与法治五年级上册第一单元检测题(含答案)
- 2025年全国人大机关公开遴选公务员真题(附答案)
- 中国广电山东网络有限公司2026年度市县公司招聘145个模拟试卷附答案
- 广东省医师变更执业注册申请审核表
- 直播间话术顺口溜词语大全
- 2025年家用学习打印机行业研究与消费行为调查数据
- 2025年江苏(专升本)民法考试真题及答案
- 合成生物产品质量检测工程师岗位招聘考试试卷及答案
- 重师新生入学教育考试试题及答案
- 大公司办公职场管理制度
- 致敬劳动者争做劳动小先锋-劳动教育主题队会
评论
0/150
提交评论