资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,人工智能与专家系统(第二版)中国水利水电出版社,人工智能和专家系统专家系统,第5章 专家系统,专家系统,(Expert System,ES)是一,种模拟人类专家解决领域问题的计算机软,件系统。专家系统内部含有大量的某个领,域的专家水平的知识与经验,能够运用人,类专家的知识和解决问题的方法进行推理,和判断,模拟人类专家的决策过程,来解,决该领域的复杂问题。,第5章 专家系统,5.1 专家系统概述,5.2 LISP语言,5.3 知识库与推理机,5.4 解释机制与解释器,5.5 知识获取与检测,5.6 专家系统工具,5.1 专家系统概述,5.1.1 专家系统研究的意义,5.1.2 专家系统的结构与开发方法,5.1.1 专家系统研究的意义,1 专家系统研究的意义,(1)专家系统研究是计算机科学的应,用和发展的需要.,(2)专家系统为人类保存、传播、使,用和评价知识提供了一种有效的手段.,(3)专家系统研究可以产生巨大的经,济效益.,2 专家系统和传统程序的区别,(1),数据结构+算法,=,程序,知识+推理,=,系统,(2)专家系统解决问题的知识和对知,识的处理(推理机)相分离。,5.1.2 专家系统的结构与开发方法,1 专家系统的结构,知识库,以某种存储结构存储领域专家,的知识。,全局数据库,亦称为“黑板”,它用于存,储求解问题的初始数据和推理过程中得到,的中间数据,以及最终的推理结论。,推理机,根据全局数据库的当前内容,从知识,库中选择匹配成功的可用规则,并通过执行可用,规则来修改数据库中的内容,直至推理出来问题,的结论。,解释器,用,于向用户解释专家系统的行为。,用户接口,是系统与用户进行对话的界面。,知识获取模块,把知识工程师提供的知识转换,为知识内部表示模式存入知识库中,在知识存储,的过程中,对知识进行一致性、完整性检测。,图5.1 专家系统结构框图,2 专家系统的一般特点,(1)知识的汇集,(2)启发性推理,(3)推理和解释的透明性,(4)知识获取与知识更新,3 专家系统的开发方法,(1)生命周期方法,图5.2 专家系统开发过程的瀑布模型,(2)快速原型法,快速原型法,采用增量式开发方法,即,通过对基本功能的逐步扩大来完善系统。,演示原型,研究原型,领域原型,产品原型,5.2 LISP语言,5.2.1 LISP语言的特点与表达式,5.2.2 LISP语言的基本函数,5.2.1 LISP语言的特点与表达式,1 LISP语言的特点,(1)函数性,(2)递归性,(3)数据与程序的一致性,(4)自动进行存储分配,(5)语法简单,2 LISP的符号表达式,符号名,是以字母开头不含规定的特殊,字符的字符串,可以把计算或处理后的结,果赋给一个符号。,数和符号都称为,原子,。若干个数或符,号用括号括起来就构成一个,表,,表中的元,素用空格分开。没有元素的表称为,空表,,,空表可用()表示,也可表示为nil,空表,也是原子。,表是可递归定义的,即可用若干个表来,定义另一个表。,原子和表称为LISP的,符号表达式,。,LISP的符号表达式采用前缀表示形式,,即表中第一个元素是函数符号名,其余的元,素是这个函数要求的运算或处理的元素。,符号表达式:,(setq,y,(*2 3 4 ),5.2.2 LISP语言的基本函数,1 数值运算函数,(1)算术运算函数,算术运算函数有:加函数+、减函数-、,乘函数*、除函数/、加1函数1+、减1函数1-,等。,+、-、*、/等函数可对多个数或已经,赋值的符号进行数值运算。,(2)超越函数,2 求值与赋值函数,(1)禁止求值函数,禁止求值函数quote对指定的表说明表中元素都是数。例如,(quote (a b c ),的返回值是表(a b c)。quote函数的缩写为“,”。,(2)赋值函数,赋值函数setq用于对变元赋值,对一个变元赋的值可以是一个数、一个符号表达式、一个表或者另一个变元。setq函数可以对多个变元依序赋值,例如,(setq,x,(1 2),y,x,),(3)求值函数,函数values返回其后各变元的值,函数values-list返回其后一个表的各元素。,(values (*2 3)(+4 5)6 9,(values-list(a b c)a b c,3 表处理函数,(1)取表部分内容的函数,car函数:取表的第一个元素,例如,(car,(a b c)a,cdr函数:取表中除掉第一个元素的余下表,例如,(cdr,(a b c)(b c),函数car和cdr可对一个表连续作用,例如,(car(cdr(cdr(cdr,(a b c d e f),可表示为,(cadddr,(a b c d e f),(2)构造表的函数,cons函数:把指定的两个元素构造成一个表,如果第2,个元素是一个表,则把第1个元素加到第2个元素的表头。,例如,(cons a,(b c)(a b c),(cons,(a b),(c d)(,(a b)c d),list函数:把指定的多个元素按顺序构造成一个表。,例如,(list a b c d)(a b c d),(list,(a b),(c d)(,(a b),(c d),append函数:把指定的多个表拼接成一个表。,例如,(append,(a b),(c d)(a b c d ),(3)其他表函数,list-length函数返回指定的一个表的元素个数。,例如,(list-length,(a (b c)2,member函数表达式为,(member item list),如果item是表list中的一个元素,则member返回,list中从元素item开始的余下表;否则,返回空表,(),也即是返回nil。,(member b,(a b c d))(b c d),(member,(a b),(a b c d)(),(member,(b c),(a,(b c)d)(,(b c)d),4 逻辑函数,(1)数据类型判断函数,atom函数:判断其后的对象是否是原子,,若是一个原子,则返回t;否则,返回nil。,listp函数:判断其后的对象是否是一个,表,若是一个表(包括空表),则返回t;否则,,返回nil。,null函数:判断其后的对象是否是一个空,表,若是一个空表,则返回t;否则,返回nil。,(2)数的比较函数,数的比较函数用于比较两个数的大小,有,大于比较函数,小于比较函数,大于等于比较函数=,小于等于比较函数,等于比较函数=,不等于比较函数/=,若指定的两个数满足函数的比较关系,则返回t;否,则,返回nil。,(3)等值函数,数的等于比较函数“=”用于比较两个数是否相,等,若要判别两个表或符号是否相等,则要用等,值函数equal。,(equal,(a b c),(a b c)t,(equal ()nil)t,(equal,(a b c),(a,(b c)nil,(4)逻辑运算函数,and 函数:当且仅当其各元素的值均,为非nil,则返回值为t;否则,返回nil。,or函数:当且仅当其各元素中只要有,一个元素的值为非nil,则返回值为t;否,则,返回nil。,not函数:当且仅当其元素的值为nil,,则返回值为t;否则,返回nil。,5 条件函数,(1)if函数,if函数的表达式为,(if test then else),若测试条件表达式test的值为非nil,则对表,达式then求值,且if函数的返回值就是then的值;,否则,对表达式else求值并作为if函数的返回值,,如果没有else,则if函数返回nil。,if函数表达式中,else部分是可缺省的。表达,式中用方括号 括起来的部分表示是可缺省的。,(2)when函数,when函数的表达式为,(when test form*),其中,test为测试条件表达式,form为符号,表达式,form*表示可有多个符号表达式。,若test的值为非nil,则顺序对多个form,求值,且以最后一个form的值作为when函,数的返回值;否则,when函数返回nil。,(3)unless函数,unless函数的表达式为,(unless test form*),若测试条件表达式test的值为nil,则顺,序对多个符号表达式form求值,且以最后,一个form的值作为unless函数的返回值;否则,unless函数返回nil。,(4)cond函数,cond函数的表达式为,(cond (exp,11,exp,12,),(exp,21,exp,22,),(exp,n1,exp,n2,),cond函数顺序对,n,个表进行处理,一个表,(exp,i1,exp,i2,)称为一个cond,分句,。每个分句中,的第一个元素exp,i1,是这个分句的测试条件表达,式,其后各元素是符号表达式。,cond函数顺序计算各分句exp,i1,的值,若exp,i1,的值为非nil,则计算这个分句各表达式的值,且,以最后一个表达式的值作为cond函数的返回值;,若所有分句的条件表达式的值均为nil,则cond函,数返回nil。,一种特殊情况是:若某个cond分句中只有,exp,i1,且exp,il,的值为非nil,则cond函数返回这个,exp,i1,的非nil值。,6 自定义函数,defun自定义函数的表达式为,(defun name lambda-list form*),其中,name是新函数的函数名,,lambda-list是新函数name的变量表,,form*是由多个表达式组成的新函,数name的定义体。,例5.1,用自定义函数defun定义比较函数compare,。,解:,可如下定义函数compare:,(defun compare (,x,y,),(cond (=,x,y,)(print“numbers are same”),(,x,y,)(print“fist is bigger”),(t (print“first is smaller”),一个新的函数被定义后就可如同LISP的基本,函数一样被直接调用。例如,(compare (3 5)“first is smaller”,无名函数lambda,7 结构迭代函数,do函数的表达式为:,(do (var1 init1 upd1),(var2 init2 upd2),),(condition action1 action2 ),form*),(condition action1 action2)是循环是否结束的判,断子句,若condition的值为非nil,则循环结束,并对,action1,action2,依序求值,把最后一个表达式action的,值作为do函数的返回值;否则,执行循环体form*。,例5.4,用结构迭代方式来定义计算阶乘,n,!的函数factorial(,n,)。,解,:可如下定义:,(defun factorial (,n,),(do (,i,1 (1+,i,),(result 1),(,i,n,)result),(setq result (*,i,result),调用时,用实参代替函数factorial的形参n。例如,(factorial 4)24,8 非结构迭代函数,prog函数的表达式为,(prog (var1 init1)(var2 init2),exp1 exp2 ),在表达式序列exp1,exp2,中可以有,多个表达式含有go函数表达式,至少有一,个表达式含有return函数表达式。若没有go,和return,则对各表达式顺序求值后退出,prog,且函数prog的返回值为nil。,go函数的表达式为,(go symbol),在prog中找名为symbol的表达式(原,子),若未找到,则prog函数返回出错信,息;若找到,转到名为symbol的原子之后,的表达式继续执行。,return函数的表达式为,(return form),对form求值后退出prog,且函数prog的,返回值为form的值。,5.3 知识库与推理机,5.3.1 产生式规则与规则库的存储结构,5.3.2 正向推理机,5.3.3 反向推理机,5.3.1 产生式规则与规则库的存储结构,1 产生式规则的存储结构,(F,1,F,2,F,3,)(F,4,F,5,)H,1,H,2,可等价变换为下述4条规则:,R,11,:F,1,F,2,F,3,H,1,R,12,:F,4,F,5,H,1,R,21,:F,1,F,2,F,3,H,2,R,22,:F,4,F,5,H,2,用与/或图表示规则的事实和结论之间的与或关系:,F,1,F,2,F,3,F,4,F,5,H,2,H,1,图5.3 产生式规则与/或图,产生式规则与条件语句之间存在以下,根本的区别,:,产生式规则具有自含性。,可用规则的执行将取决于产生式系统的冲突消解,策略。,在LISP中,一条产生式规则的存储结构是一个表:,(规则名,(if(条件1)(条件2)(条件,n,),(then(结论1)(结论2)(结论,m,),2 规则库的存储结构,例5.5,建立动物识别专家系统的规则库,规则,名分别是rule,1,rule,2,rule,15,,规则库的符号名为,rules。,(setq rules,(rule1,(if (animal has hair)若动物有毛发(F,1,),(then (animal is mammal)则动物是哺乳动物(M,1,),(rule2,(if(animal gives milk)若动物有奶(F,2,),(then(animal is mammal)则动物是哺乳动物(M,1,),(rule3,(if(animal has feathers)若动物有羽毛(F,9,),(then(animal is bird)则动物是鸟(M,4,),(rule4,(if(animal flies)若动物会飞(F,10,),(animal lays eggs)且生蛋(F,11,),(then(animal is bird)则动物是鸟(M,4,),(rule5,(if(animal eats meat)若动物吃肉(F,3,),(then(animal is carnivore)则动物是食肉动物(M,2,),(rule6,(if(animal has pointed teeth)若动物有犀利牙齿(F,4,),(animal has claws)且有爪(F,5,),(animal has forword eyes)且眼向前方(F,6,),(then(animal is carnivore)则动物是食肉动物(M,2,),(rule7,(if(animal is mammal)若动物是哺乳动物(M,1,),(animal has hoofs)且有蹄(F,7,),(then(animal is ungulate)则动物是有蹄类动物(M,3,),(rule8,(if(animal is mammal)若动物是哺乳动物(M,1,),(animal chews cud)且反刍(F,8,),(then(animal is ungulate)则动物是有蹄类动物(M,3,),(rule9,(if(animal is mammal)若动物是哺乳动物(M,1,),(animal is carnivore)且是食肉动物(M,2,),(animal has tawny color)且有黄褐色(F,12,),(animal has dark sports)且有暗斑点(F,13,),(then(animal is cheetah)则动物是豹(H,1,),(rule10,(if(animal is mammal)若动物是哺乳动物(M,1,),(animal is carnivore)且是食肉动物(M,2,),(animal has tawny color)且有黄褐色(F,12,),(animal has black stripes)且有黑色条纹(F,15,),(then(animal is tiger)则动物是虎(H,2,),(rule11,(if(animal is ungulate)若动物是有蹄类动物(M,3,),(animal has long neck)且有长脖子(F,16,),(animal has long legs)且有长腿(F,14,),(animal has dark spots)且有暗斑点(F,13,),(then(animal is giraffe)则动物是长颈鹿(H,3,),(rule12,(if(animal is ungulate)若动物是有蹄类动物(M,3,),(animal has black stripes)且有黑色条纹(F,15,),(then(animal is zebra)则动物是斑马(H,4,),(rule13,(if(animal is bird)若动物是鸟(M,4,),(animal does not fly)且不会飞(F,17,),(animal has long neck)且有长脖子(F,16,),(animal has long legs)且有长腿(F,14,),(animal is black and white)且有黑白二色(F,18,),(then(animal is ostrich)则动物是鸵鸟(H,5,),(rule14,(if(animal is bird)若动物是鸟(M,4,),(animal does not fly)且不会飞(F,17,),(animal swims)且会游泳(F,19,),(animal is black and white)且有黑白二色(F,18,),(then(animal is penguin)则动物是企鹅(H,6,),(rule15,(if(animal is bird)若动物是鸟(M,4,),(animal flies well)且善飞(F,20,),(then(animal is albatross)则动物是信天翁(H,7,),R,1,:F,1,M,1,R,2,:F,2,M,1,R,3,:F,9,M,4,R,4,:F,10,F,11,M,4,R,5,:F,3,M,2,R,6,:F,4,F,5,F,6,M,2,R,7,:F,7,M,1,M,3,R,8,:F,8,M,1,M,3,R,9,:F,12,F,13,M,1,M,2,H,1,R,10,:F,12,F,15,M,1,M,2,H,2,R,11,:F,13,F,14,F,16,M,3,H,3,R,12,:F,15,M,3,H,4,R,13,:F,14,F,16,F,17,F,18,M,4,H,5,R,14,:F,17,F,18,F,19,M,4,H,6,R,15,:F,20,M,4,H,7,图5.4 动物识别专家系统规则库与/或图,5.3.2 正向推理机,1 函数recall,函数表达式:,(recall fact),函数功能:判断变量fact中的一个事实是否,在表facts中,若是,recall返回值是fact中的事,实;否则,返回nil。,(defun (recall fact),(cond (member fact facts)fact),(t nil),2 函数test-if,函数表达式:(test-if rule),函数功能:判断变量rule中的一条规则的前,件包含的全部事实是否在表facts中,若是,test-if,返回t;否则,返回nil。,(defun (test-if rule),(prog (ifs),(setq ifs (cdadr rule),loop,(cond (null ifs)(return t),(recall (car ifs),(t (return nil),(setq ifs (cdr ifs),(go loop),3 函数remember,函数表达式:(remember new),函数功能:判断变量new中的一个事实是否在表,facts中,若是,remember返回nil;否则,将new中,的事实添加到表facts的表头,且remember返回new,中的事实。,(defun (remember new),(cond (member new facts)nil),(t (setq facts (cons new facts),new),4 函数use-then,函数表达式:(use-then rule),函数功能:判断变量rule中的一条规则的后,件包含的全部结论是否在表facts中,若全部结论,都在facts中,则use-then返回nil;否则,将不在,facts中的结论逐一添加到表facts中,且use-then返,回t。,(defun (use-then rule),(prog (thens success),(setq thens (cdddr rule),loop,(cond (null thens)(return success),(remember (car thens),(print(car rule),(print|DEDUCES|(car thens),(setq success t),(setq thens (cdr thens),(go loop),5 函数try-rule,函数表达式:(try-rule rule),函数功能:判断规则变量rule中的一条规则的,前件包含的全部事实是否在表facts中,若全部事,实都在facts中,且规则后件有不在facts中的结,论,则把不在facts中的结论逐一添加到表facts,中,try-rule返回t;否则,try-rule返回nil。,(defun (try-rule rule),(and (tesr-if rule)(use-then rule),6 函数step-forward,函数表达式:(step-forward rules),函数功能:逐次扫描规则库rules中的规则,,若发现rules中有一条可用规则,即该规则的前件,包含的全部事实在表facts中,则把该规则的后件,中不在facts中的所有结论添加facts中,且step-,forward返回t;若rules中没有一条可用规则,则,step-forward返回nil。,(defun (step-forward rules),(prog (rule-list),(setq rule-list rules),loop,(cond (null rule-list)(return nil),(try-rule (car rule-list)(return t),(setq rule-list (cdr rule-list),(go loop),7 正向推理机函数deduce,函数表达式:(deduce facts),函数功能:连续不断地从规则库rules中选择,可用规则,每选择到一条可用规则,就把该规则,的后件中不在facts中的所有结论添加到facts中,,对facts扩充,由扩充了的facts来选择下一条可用,规则对facts再次扩充,直至没有可用规则可选为,止。若曾找到一条可用规则对facts进行过一次扩,充,则deduce返回t;否则,deduce返回nil。,(defun (deduce facts),(prog (progress),loop,(cond (step-forward rules),(steq progress t),(t (return progress),(go loop),例5.6,对于动物识别专家系统,若已知的初始事,实是F,13,、F,12,、F,3,和F,1,,应用正向推理机deduce,说明推,理过程和得出的推理结论。,(setq facts,(animal has dark spots),(animal has tawny color),(animal eats meat),(animal has hair),即有facts=(F,13,F,12,F,3,F,1,)。,调用正向推理机(deduce facts),推理过程:,执行R,1,,扩充facts为,facts=(M,1,F,13,F,12,F,3,F,1,)。,执行R,5,,扩充facts为,facts=(M,2,M,1,F,13,F,12,F,3,F,1,)。,执行R,9,,扩充facts为,facts=(H,1,M,2,M,1,F,13,F,12,F,3,F,1,)。,经过4步推理,正向推理终止,推理机函数deduce,返回的变量progress的值为t。,解释器取当前facts中的第一个元素得出推理的结论是,H,1,,即(animal is cheetah)。,5.3.3 反向推理机,1 函数thenp,函数表达式:(thenp fact rule),函数功能:判断fact是否在规则变量rule中的,一条规则的后件中,若是,则函数thenp返回规则,后件从fact开始的余下表;否则,thenp返回nil。,(defun (thenp fact rule ),(member fact (cdddr rule),2 函数inthen,函数表达式:(inthen fact ),函数功能:从规则库表rules中送出所有的可,用规则组成一个可用规则表,表中每个元素是一,条可用规则。若规则的后件含有fact,则这条规则,是一条可用规则,且函数inthen返回可用规则表。,若没有一条可用规则,则inthen 返回空表。,(defun (inthen fact ),(apply,append,(mapcar,(lambda (rule),(cond (thenp fact rule ),(list rule ),(t nil ),(rules ),3 函数test-if+,函数表达式:(test-if+rule),函数功能:直接或间接地反向推理确认规则,变量rule 中的一条规则的前件包含的所有条件是,否都为真,若是,则函数test-if+返回t;否则,test-if+返回nil。,(defun (test-if+rule ),(prog (ifs),(setq ifs (cdadr rule),loop,(cond (null ifs )(return t ),(verify (car ifs ),(t (return nil ),(setq ifs (cdr ifs ),(go loop ),4 函数try-rule+,函数表达式:(try-rule+rule),函数功能:若规则变量rule中的一条规则的前,件包含的所有条件都能直接或间接地反向推理确,认为真,且规则的后件中有不在facts中的结论,,则把规则后件中不在facts 中的结论添加到facts,中,函数try-rule+返回t;否则,try-rule+返回nil。,(defun (try-rule+rule ),(and (test-if+rule )(use-then rule ),函数,verify,函数表达式:(,verify fact,),函数功能:直接或间接地反向推理确认变量,fact,中的一个假设是否为真,若为真,则函数,verify,返回,t,;否则,verify,返回,nil,。,(,defun,(verify fact ),(,prog,(relevant1 relevant2 ),(,cond,(recall fact )(return t ),(,setq,relevant1 (,inthen,fact ),(,setq,relevant2 relevant1 ),(cond (null relevant1),(cond (member fact askes )(return nil ),(and (print|IS THIS TRUE:|fact )(read ),(remember fact ),(return t ),(t (steq asked (cons fact asked ),(return nil ),loop1,(cond (null relevant1)(go loop2 ),(try-rule(car relevant1)(return t ),(setq relevant1 (cdr relevant1 ),(go loop1 ),loop2,(cond (null relevant2 )(go exit ),(try-rule+(car relevant2 )(return t ),(setq relevant2 (cdr relevant2 ),(go loop2 ),exit,(return nil ),6 反向推理机函数diagnose,函数表达式:(diagnose hypo ),函数功能:逐一确定假设表hypo中多个假设,的真或假,对确定为真的假设给出屏幕输出说明。,(defun (diagnose hypo ),(prog (poss),(steq poss hypo ),loop,(cond (null poss),(print|NO HYPOTHESES CAN BE,CONFIRMED|),(return ),(verify (car poss ),(print|HYPOTHESES|(car poss ),(print|IS TRUE|),(setq poss (cdr poss ),(go loop ),例5.7,对于动物识别专家系统,若用户要求,确定的假设是H,1,,应用反向推理机diagnose确定假,设H,1,是否成立,说明推理过程。,解:,使用setq函数把假设H,1,赋给假设表 hypo:(setq hypo,(animal is cheetah ),即有hypo=(H,1,)。,调用反向推理机(diagnose hypo),推理过,程:,由(diagnose hypo)先复制poss=(H,1,),然后,调用(verify H,1,),此时,facts=()。,首先调用(recall H,1,),由于fact=H,1,,不在,facts中,调用(inthen H,1,),从rules中选出后件含,有H,1,的可用规则只有R,9,,故,relevant1=relevant2=(R,9,)。,由于,relevant1=(R,9,),(),,调用(,try-rule R,9,),,因为,R,9,的前件的全部条件不在,facts,中,故对,H,1,进行间接反向推理。,由于,relevant2=(R,9,),(),,调用(,try-rule+R,9,)。,它首先调用,(test-if+R,9,),,把,R,9,的前件包含的全部条件赋给,ifs,,即有,ifs=,(,F,12,F,13,M,1,M,2,)。,在,(test-if+R,9,),中,将顺序调用,:,(verify F,12,),(verify F,13,),(verify M,1,),(verify M,2,),调用(verify F,12,),此时,facts=()。,首先调用(recall F,12,),由于fact=F,12,不在,facts中,调用(inthen F,12,),从rules中找不到后,件含有F,12,的可用规则,故,relevant1=relevant2=(),由于,relevant1=,(),屏幕出现提示:,“,IS THIS TRUE,:,F,12,”,若用户确认,F,12,为真,则把,F,12,加到,facts,的表头,,使,facts=,(,F,12,)。,调用(verify F,13,),此时,facts=(F,12,)。,类似(verify F,12,),若用户在屏幕提示:“IS THIS TRUE:F,13,”,的询问下,确认F,13,为真,则把F,13,加到facts的表,头,使 facts=(F,13,F,12,)。,调用(verify M,1,),此时,facts=(F,13,F,12,)。,首先调用(,recall M,1,),由于,fact=M,1,不在,facts,中,调用,(,inthen,M,1,),,从,rules,中选出后件含,有,M,1,的可用规则有,R,1,和,R,2,,故,relevant1 =relevant2 =(R,1,R,2,),。,由于,relevant1=(R,1,R,2,),,顺序调用,(try-rule R,1,),(,tuy,-rule R,2,),因为,R,1,的前件条件,F,1,和,R,2,的前件条件,F,2,都不在,facts,中,故对,M,1,进行间接反向推理。,由于,relevant2=(R,1,R,2,),顺序调用,(try-rule+R,1,),(,try-rule+R,2,)。,前者首先调用(,test-if+R,1,),把,R,1,的前件条件赋给,ifs,,即有,ifs=(F,1,),。在,(test-if+R,1,),中将调用(,verify F,1,)。,同样,后者将产生调用,(verify F,2,),。,调用,(verify F,1,),,类似,(verify F,12,),,若用户,在屏幕提示:,“,IS THIS TRUE,:,F,1,”,的询问下,确认,F,1,为真,则把,F,1,加到,facts,的表头,,使,facts=(F,1,F,13,F,12,),。,调用,(verify F,2,),,若用户在屏幕提示:,“,IS THIS TRUE,:,F,2,”,的询问下,确认,F,2,为真,则把,F,2,加到,facts,的表头,,使,facts=(F,2,F,1,F,13,F,12,),。,调用(verify M,2,),此时,,facts=(F,2,F,1,F,13,F,12,),首先调用,(recall M,2,),由于,fact=M,2,不在,facts,中,,调用(,inthen,M,2,),从,rules,中选出后件含有,M,2,的可用规,则,R,5,和,R,6,故,relevant1=relevant2=(R,5,R,6,),。,由于,relevant1=(R,5,R,6,),,顺序调用,(try-rule R,5,),(try-rule R,6,),因为,R,5,的前件条件,F,3,与,R,6,的前件包含的全部条件,F,4,、,F,5,和,F,6,都不在,facts,中,故对,M,2,进行间接反向推理。,由于,relevant2=(R,5,R,6,),,顺序调用,(try-rule+R,5,),(try-rule+R,6,),前者产生调用,(verify F,3,),。,后者产生调用,(verify F,4,),、,(verify F,5,),和,(verify F,6,),。,在执行这,4,个调用时,若用户在相应屏幕提示下分别确,认,F,3,、,F,4,、,F,5,和,F,6,为真,则使,facts=(F,6,F,5,F,4,F,3,F,2,F,1,F,13,F,12,),。,至此,调用,(verify H,1,),执行完毕,屏幕输出:“,HYPOTHESES H,1,IS TRUE”,。,由,(,setq,poss,(,cdr,poss,),使,poss,为空表,,反向推理机,(diagnose hypo ),终止。,5.4 解释机制与解释器,1 解释的方法,(1)预置文本法。,(2)路径跟踪法。,路径跟踪法向用户提供Why解释和How解释。,2 正向推理机中函数try-rule 的重新定义,函数表达式:(try-rule rule),函数功能:判断规则变量rule中的一条规则的,前件包含的全部事实是否在表 facts中,若全部事实,都在 facts中,且规则后件有不在 facts中的结论,,则把不在facts中的结论逐一添加到表facts中,并把,rule中的这条规则添加到表rules-used的表头,try-,rule返回t;否则,try-rule返回nil。,(defun(try-rule rule),(cond(
展开阅读全文