
6871问题集2 布置:205年3月31旦星期四 酸止:4月7日累期四 JOSHUA和基于规则系统的练习 1引言 设计这个效习是为了酸两件事:它将允许你用许多方法探索一个柒于规则的系能的行为。以及 使你悉山,许多人在最后一学期构建也门的学用工程时发现它是很有用的。 知识岸 木效习中,我将化用个简单的系筑,它可以帮助你在八个最告追的互助基金莞测之问进行法定, 该系烧假定你有00美元可以投斑并西助在以下几种可能性中做出选择, 一种货币市场某金 一种及入其金(例,借券) 种积极修父的花金 一孙深合修长和使入共金〔缩写为“G") 一种保守增长基金 一种兔提基金 无〔即,不欲餐) 使用英丽编5的完数规则集可以在木讲义的最后找到。为了帮助你阅读,我」已经杜用了一生格式化 了的的定去帮助使它门的站构更清楚。例如,考忠规则2: 12]if Inwestment Gionl KETIKEMENT and Number Of Years To Retirement 10 Category Of Fund CONSERVATIVE GROWTH 8 每个规测都使用一个宽分《们提》积w部分(结果)·在规则1之中,前提中共存在两个语句而(像 我们的所有一作)结论中存在:一个语句: 一个以周中的何一个油句都通川一个易性,对像和其值来表达。作为一种格式化的的定,画件书省字母 人写的方式巧为短话《例如,投资目标,急休的年数,基金莞黑》:值以所有学都人巧的方式偏可 (RETIREMENT,I0,CONSERVATIVE GROWTH》·因此第一个语句缝会间授资目标属性是否有 RETIREMENT值,或者,使用流利的引用来月,“这个投资的日标是提供给你退体基金”·为了阅读 的简便,对象第第以显式方式存在,树闻,在达种情况下用户的投究日标是记然。 使用较良好的英冲故X整个规则,也就是说: 如果这个投资的日标是供给你的遇休,井且 知道你退体年数小于10. 那么遗择的投究类别是保守增长基金 在小中,规则看上去行点不问,我」将在下而再米讲。物别注意,讲义中的最后的规则数量是 为方使起见的。u去命名规期加不是去清点它1的数量。 -1-
6.871 问题集 2 布置: 2005年3月31日 星期四 截止: 4月7日 星期四 JOSHUA 和基于规则系统的练习 I. 引言 设计这个练习是为了做两件事:它将允许你用许多方法探索一个基于规则的系统的行为,以及 使你熟悉Joshua ,许多人在最后一学期构建他们的学期工程时发现它是很有用的。 知识库 本练习中,我们将使用一个简单的系统,它可以帮助你在六个最普遍的互助基金类别之间进行决定。 该系统假定你有2000美元可以投资并帮助在以下几种可能性中做出选择: • 一种货币市场基金 • 一种收入基金(例如,债券) • 一种积极增长的基金 • 一种混合增长和收入基金(缩写为“G&I”) • 一种保守增长基金 • 一种免税基金 • 无(即,不投资) 使用英语编写的完整规则集可以在本讲义的最后找到。为了帮助你阅读,我们已经使用了一些格式化 了的约定去帮助使它们的结构更清楚。例如,考虑规则12: 12] if Investment Goal = RETIREMENT and Number Of Years To Retirement < 10 then Category Of Fund = CONSERVATIVE GROWTH .8 每个规则都使用一个if部分(前提)和then部分(结果)。在规则12中,前提中共存在两个语句而(像 我们的所有规则一样)结论中存在一个语句。 一个规则中的每一个语句都通过一个属性,对象和其值来表达。作为一种格式化的约定,属性用首字母 大写的方式写为短语(例如,投资目标,退休的年数,基金类别);值以所有字母都大写的方式编写 (RETIREMENT, 10, CONSERVATIVE GROWTH)。因此第一个语句就会问投资目标属性是否有 RETIREMENT值,或者,使用流利的引用来问,“这个投资的目标是提供给你退休基金”。为了阅读 的简便,对象常常以显式方式存在,例如,在这种情况下用户的投资目标是退休。 使用较良好的英语放置整个规则,也就是说: 如果这个投资的目标是供给你的退休,并且 知道你退休年数小于10, 那么选择的投资类别是保守增长基金。 在Joshua中, 规则看上去有点不同;我们将在下面再回来讲。特别注意,讲义中的最后的规则数量是 为方便起见的。Joshua去命名规则而不是去清点它们的数量。 - 1 -

6871问集习 L.入门指导 条滑能酒限资品出找对电味,我们道过根务器 1登附到服务器 工艺诺公业粥面的板米的A肥吧o通Lp质和送型镜 3从网在,肝本电拷贝 4a没fo-jph-.awto.1op 在 个L学鱼时名瘦口将会糖唤。转会乔一个英示行。《类的。楼位的所行 深的股 9这将开你的窗消中治 l0.从XEms中的CLE11c巢单的Compi1 e other子巢单中选择场冲圈 2现在你可以试着回答装人应该授资的基金类别是么具婴输入以下命令: -2
6.871 问题集 2 II. 入门指导 你将在服务器端使用Allegro通用Lisp解释器和在作业网页中可以找到的Joshua知识库。我们通过服务器 端的Allegro通用Lisp和Joshual来熟悉你,进而开始我们的工作。 1. 登陆到服务器 2. server% add acl_v6.2-alisp 6.871 这将会挂上我们将使用的版本的Allegro通用Lisp锁和课程锁。 3. 从作业网页下载知识库文件invest-josh-kb.custom.lisp。 将其放在你的本地目录中。这将使你制作一个例子知识库的本地拷贝。 4. server% chmod 700 ~/invest-josh-kb.custom.lisp 这将只确认文件是可读的。 5. server% joshua8 & 依赖于服务器的装载,这会花费一些时间。一个XEmacs将启动并将建立一个级别低于其 中的全部Joshua代码的lisp。 最终,你将看到一个CL-USER(1):在XEmacs 窗口中提示 (带有*common-lisp*标号的那些)。 6. CL-USER(1): (clim-env:start-clim-environment) 称为导航器的小窗口将会弹出。 7. 在导航器窗口中,从工具菜单选择Lisp监听器。 一个Lisp监听器窗口将会被唤醒,而且你将会看到一个⇒提示符。(是的,该位置的所有 窗口。) 8. ⇒:joshua syntax yes 这个命令对于允许方括号预测语法是必要的。如果将来在编译你的工程代码之前忘了做, 你将会得到一个与不在后引号之内的与逗号相关的错误信息。 9. ⇒:edit file ~/invest-josh-kb.custom.lisp 这将打开你的XEmacs 窗口的缓冲器中的代码。 10. 从XEmacs 中的ACLFile 菜单的Compile other 子菜单中选择缓冲器 11. 对于正在编译..完成..的信息,观察XEmacs 底部的状态栏。在此处,返回你的Lisp监 听器窗口。 12. 现在你可以试着回答某人应该投资的基金类别是什么。只要输入以下命令: ⇒ (ask [category-of-fund ben-bitdiddle ?x] #’print-answer-with-certainty) 当然,你可以随便拜访除了Ben Bitdiddle之外的任何人,它是我们的权威测试主题。请看 讲义的最后关于怎样处理错误和调试器的注解。 - 2 -

6871问写集2 L,使用.1 oshua:谓与预言 1hn数据库中的每一冬事实称为一个断言。一个嘶言是由方括号括怎来的一个列表。树如: FATHER-OF JOHN [define-predicate father-of (father child)) ne-predicate fatherof) 11 IHA8-HBALTH-INSURANCE BEN-8ITDIDOLE YE81 我门可以通过确定性因装告诉合乎情型事情,像这样 2食以用我选的注产装。而行安U心Rr心斤只是个指世业我 (untel1 [HAS-LIFE-INSURANCE BEN-BITDIDDI3 YES]1 《一些人报告说UNEL会卡在无限福环之中:我试图限联这个情记。) 又使用Josh:看一看他知道了什么 HAS-LIFE-INSURANCE BEN-BITDIDDLE YES -3
6.871 问题集 2 III. 使用Joshua: 谓词与预言 Joshua 数据库中的每一条事实称为一个断言。一个断言是由方括号括起来的一个列表。例如: [FATHER-OF JOHN MARY] 意思可能为JOHN是MARY的父亲。我们使用define-predicate宏来定义谓词(在类中我们称为“属 性”)。为了定义简单的谓词,我们需要做的所有工作是(像你在下面看到的一样,Joshua的提 示字符是右箭头): ⇒ (define-predicate father-of (father child)) 宏的第一个赋值是谓词的名字,而第二个是一个赋值列表。对宏来说,第三个赋值是可选的, 它是谓词所继承的类型列表。这是一个你现在还不知道的高级性能,但是如果你感兴趣的话,你 可以通过检查这个问题集所附的代码来查看具有确定性因素的谓词是如何定义的,即通过继承提 供确定性因素支持的一个基类。 要去掉一个谓词,简单地执行这个命令: ⇒ (undefine-predicate ’father-of) IV. 使用Joshua: 谈论事情 使用Joshua你可以首要和最简单地做的事情是告诉它事实。例如写下如下代码: ⇒(tell [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES]) 我们也可以通过确定性因素告诉合乎情理的事情,像这样: ⇒(tell [HAS-LIFE-INSURANCE BEN-BITDIDDLE YES] :justification ’((user-input 0.8))) 注意,我们可以用我们选择的任何确定性来替换0.8,而符号USER INPUT只是一个注释,它让我们 知道理由来自哪里;你可以在那里写下任何事情。 取消谈论的事情也是可能的,例如: ⇒ (untell [HAS-LIFE-INSURANCE BEN-BITDIDDLE YES]) (一些人报告说UNTELL会卡在无限循环之中;我们试图跟踪这个错误。) V. 使用Joshua: 看一看他知道了什么 ⇒:show joshua database True things [HAS-LIFE-INSURANCE BEN-BITDIDDLE YES] - 3 -

6871问原集2 AS-8EALTH-INSUPANCE BEN-BITDIODLE YES] Ealse things None :explain predication [RAS-HEATTE-INSURANCE BEN-BTTDIDDLE YSS] 我们将得到以下样子的粒出: CHAS-HEALTH-IRSURANCE BKN-BITOIDBLX Y]is true lt isa PRXIS 高酱结染想汽算赠的西因为我们在Lp监听器的最膜级把这个事实台苏了0a。投资顺同代 ASK最单的格式演小如下 意的领数花陈森鲜深4.性 -二AE经ee認] 身.桥长有楼长。它是现们在数指库南中所需设备与浅式样匹代 我门从系统中得到以下应答 要做的另一个好玩的事州是试一试这个 (aak (HAB-HEALZH-INBURANCE 3x ?y]'print-answer-with-certainty) 送在我们可以石到确定性因意: [HAS-HEALTH-INSURANCE ALYS8A-P-EACKER BOI 1 LAS-EALH-THSURAIE BEN-BITDIDS YES]U.U
6.871 问题集 2 [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] False things "None" 因此我们看到Joshua现在知道三个事实。在Lisp监听器中,你可以在它们中的任何一个上点击鼠标 中键获得解释,以及MYCIN中HOW命令的内容,Joshua怎样推断事实的内容。你也可以通过输入以 下命令存取这个解释: ⇒ :explain predication [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] 我们将得到以下样子的输出: [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] is true It is a PREMISE 这是一个相当简单的解释,因为我们在Lisp监听器的最顶级把这个事实告诉了Joshua。投资顾问代 码的结果解释将是更有趣的。 VI. 使用Joshua: 询问事情 ASK最简单的格式演示如下: ⇒ (ask [HAS-HEALTH-INSURANCE ?x ?y] #’print-query) 这个命令简单地通过数据库来运行并在找到的匹配该式样的每一个断言中执行函数print-query。注 意,?x和?y都是逻辑变量,以匹配任何事情并且不一定相等。这个例子中该命令的输入为: [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] 假如我可以附加地告诉Joshua,ALYSSA-P-HACKER没有保险,我们就会看到如下输出: [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] [HAS-HEALTH-INSURANCE ALYSSA-P-HACKER NO] 非常有趣的是,我们可以询问调用任何函数,它是我们在数据库断言中所需要的并与该式样匹配 的。如果我们输入以下命令,结果如何: ⇒ (ask [HAS-HEALTH-INSURANCE ?who ?value] #’(lambda (backward-support) (if (eq ?value ’yes) (format t " ~A has health insurance." ?who) (format t " ~A does not have health insurance." ?who)))) 我们从系统中得到以下应答: ALYSSA-P-HACKER does not have health insurance. BEN-BITDIDDLE has health insurance. 要做的另一个好玩的事情是试一试这个: ⇒ (ask [HAS-HEALTH-INSURANCE ?x ?y]#’print-answer-with-certainty) 现在我们可以看到确定性因素: [HAS-HEALTH-INSURANCE ALYSSA-P-HACKER NO] 1 [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] 0.8 - 4 -

6871问竖集2 VTⅡ,使用Josh■a:定义规则 型装由例子代的定义的下列规则 icertainty10i9) 个关 学, (CADECONCY-o-a2 DOLE AUEQUATE]0.8 集镜贵警款磨限久事安得山兰论的话。,成不合有省山,为什久起 odhm厚在知道3条事实 alvethings Nonet 让我们瑞ahua解释一下它是老杆在中B起n的覆羞面是合语纳 cxplain predication [ADEQUACY-OF-IN8URANCE-COVERAGE BEN-BITDIDOLE ADEQUATE .5 -3
6.871 问题集 2 VII. 使用Joshua: 定义规则 观察由例子代码定义的下列规则: (defrule full-insurance-coverage (:backward :certainty 1.0 importance 97) if [and [HAS-LIFE-INSURANCE ? who YES] [HAS-HEALTH-INSURANCE ? who YES]] then [ADEQUACY-OF-INSURANCE-COVERAGE ?who ADEQUATE]) defrule是一种构造规则的定义格式。其第一个赋值是规则的名字而第二个是一个关键词列表 可能的关键词包括::backward,后向链规则,和:forward,前向链规则。你不能同时使用这两 个。:certainty关键词确定列表中的下一个元素是规则的确定性因素。:importance关键词确定列表 中的下一个元素是规则的重要性,它用于人工控制那条规则首先试用。具有更高重要性的值意 指该规则在具有更低重要性值的规则之前试用。一般来说,你可以不理睬重要性的关键词和数 字;它只是证明Joshua 比这个问题集所需要的具有更多的机制。 这个格式的其它部分是规则的主体。If和then是混合标记,分别优先于if和then规则语句。 逻辑变量的定义域在规则的生存期内,因此,if语句中的?who 必须是与then语句中的?who相同。 这是一种后向链规则,因此,它在我们询问一些Joshua事情的时候触发。如果我们需要: ⇒ (ask [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE #’print-answer-with-certainty) 因此我们知道[HAS-LIFE-INSURANCE BEN-BITDIDDLE YES] and [HAS-HEALTHINSURANCE BEN-BITDIDDLE YES],我们可以得出以下结论: [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] 0.8 注意,如果我们不能从数据库中对我们在询问的事实得出结论的话,就不会有输出。为什么是 确定性因素0.8?让我们看一看Joshua知道了什么: ⇒:show joshua database Joshua现在知道3条事实: True things [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] [HAS-LIFE-INSURANCE BEN-BITDIDDLE YES] [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] False things "None" 让我们请Joshua解释一下它是怎样推出Ben的覆盖面是合适的: ⇒ :explain predication [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] - 5 - - 5 -

6871问思集2 得拼的的S心-URAICE--cov2Ea-s1e:ou比Aoae上h击积+标 VT.查香Joshua正在微什么 你可以肌过输入以下的合令来允许在中 技学来被的圆是发生了什么。假设我带销告行结的,如来我打设有数 ERAGR BEN-BITDIEDLE ADEOUATE) CE-OOVER g Pre >Locking fo FULL-IN -CONERACE BEN-3I9DIDOLE ADEQUATE [ADECUACY-OS-INSURANEX-COVKRASK NEN-NITBI BDLE ADKOJATE)1.0 社用以下金令关闭该性能 -6
6.871 问题集 2 在Lisp监听器的[ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE]上点击鼠标中 键将会产生同样的输出的召回率: [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] is true It was derived from rule FULL-INSURANCE-COVERAGE [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] is true It is an USER-INPUT [HAS-LIFE-INSURANCE BEN-BITDIDDLE YES] is true It is a PREMISE 确定性因素0.8提升,因为0.8是规则前提的AND语句中的最小确定性因素。规则自身的确定性因 素是1.0,所以结果的确定性是0.8。 VIII. 查看Joshua正在做什么 你可以通过输入以下的命令来允许在Joshua 中跟踪: ⇒ :enable joshua tracing all 观察当我们问与以前相同的问题是发生了什么。假设我们撤销告诉结论;如果我们没有做 该规则就全然不会被触发。 ⇒ (ask [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] ’print-answer-with-certainty) > Asking predication [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] > Trying backward rule HEALTH-INSURANCE-COVERAGE (Goal... ) [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE VALUE] > Asking predication [HAS-HEALTH-INSURANCE BEN-BITDIDDLE NO] > Exiting backward rule HEALTH-INSURANCE-COVERAGE > Trying backward rule LIFE-INSURANCE-COVERAGE (Goal... ) [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE VALUE] > Asking predication [HAS-LIFE-INSURANCE BEN-BITDIDDLE NO] > Exiting backward rule LIFE-INSURANCE-COVERAGE > Trying backward rule FULL-INSURANCE-COVERAGE (Goal... ) [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE VALUE] > Asking predication [HAS-LIFE-INSURANCE BEN-BITDIDDLE YES] > Succeed in Asking Predication [HAS-LIFE-INSURANCE BEN-BITDIDDLE YES] > Asking predication [HAS-HEALTH-INSURANCE BENDITDIDDLE YES] > Succeed in Asking Predication [HAS-HEALTH-INSURANCE BEN-BITDIDDLE YES] > Succeeding backward rule FULL-INSURANCE-COVERAGE > Justifying: [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] Looking for more backward rule matches FULL-INSURANCE-COVERAGE (Goal... )[ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] > Exiting backward rule FULL-INSURANCE-COVERAGE > Succeed in Asking Predication [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] [ADEQUACY-OF-INSURANCE-COVERAGE BEN-BITDIDDLE ADEQUATE] 1.0 使用以下命令关闭该性能: - 6 -

687引1问愿集2 1代,在运行创子代码是要注意的事情 大执行下列命令去春看移为关系的则图 ar-at-tand 如果你将这张图写入一个文件,试一试以下合令 -fund ito tile too.ps X.试用Joshu进一步阅读 种离责武的位.市态考aba如Gd和ose风e.它们都在 X.练习0,确信你可以运行sh X,练习1:试用你上面装载的知识库远行以下创子。 以下子月 户为 ,具有一个RA 通过红监所的项级执行以下金令开协的同 年出务.保行全文并设路方法意盖过 的解释音作能去找出如 Copy Output1tery,这将会贝出现在缓冲区中的作何内到文件 .7
6.871 问题集 2 ⇒ :disable joshua tracing all IX. 在运行例子代码是要注意的事情 在响应任何问题时,允许输入下列字符。输入Control+Shift+R显示运行的是什么规则。输入 Control+Shift+W像是在问MYCIN中的WHY;它解释通过问当前的问题和运行当前的规则,系统 试图完成什么。输入Control+Shift+H显示一个帮助信息提醒你这些按键做什么。 每一个这样的键组合也将会显示一个包含合法答案(或像“一个数字”这样的一个描述)的信 息。显示出来的任何可能的答案是与鼠标相关的,因此,试着只在你想要的答案上点击鼠标。问题 提示也提供完整性,因此你只需要对你的应答输入足够的字符,这样不会存在歧义,然后点击空 格键。 试着执行下列命令去查看称为关系的规则图: ⇒ :graph rules category-of-fund 如果你想将这张图写入一个文件,试一试以下命令: ⇒ :graph rules category-of-fund :to file foo.ps X. 试用Joshua: 进一步阅读 对于更多关于Joshua 的信息,请参考Joshua Users Guide和Joshua Reference Manual,它们都在 作业网页可以看到。 XI. 练习0:确信你可以运行Joshua 作业的第一部分是确信你可以使用我们给你的指令运行Joshua。今天就做!无论有任何问题,都 请与课程教师立即联系;我们将尽可能协助你。请不要等着在服务器端试用Joshua。因为本次作业 的截止日期将要临近,我们帮助你的能力将会减少。 XII. 练习1:试用你上面装载的知识库运行以下例子。 试一试以下例子。用户为CLYDE: 42岁。 有健康和人寿保险。 具有$20,000的存款余额。 月收入为$3,000。 没有被养老金覆盖,但具有一个IRA。 有一个12岁的孩子,他没有奖学金和信托基金, 不符合学校的贷款,并且要以昂贵的学费入学。 当前不拥有房子,但有愿望。 通过在Lisp监听器的顶级执行以下命令开始协商的召回率: ⇒ (ask [CATEGORY-OF-FUND CLYDE ?X] #’print-answer-with-certainty) 准备一个对话的全文,并列出答案。对于每一个答案,使用Joshua的解释断言性能去找出如何演 绎出答案。保存这个全文并上交。最容易做的方法是通过命令: Copy Output History ,这将会拷贝出现在缓冲区中的任何内容到文件 - 7 -

6871问题集2 名收米件大紧 一个当曾有款余颗 当m拥有一座房了, 斋空连特款禁幸控个的 XⅢ,练习21知识工程实胺 试一试以下制子。月户为T阳Y江: 23岁 ”燕盒园是是先夜经。 X练习3,观察携则 -8
6.871 问题集 2 。你只需要在问题集的最后做一次,然后编辑该文件所以它只包含你想要上交的材料。可 是,如果你想谨慎一点的话,使用不同的文件名定期做这件事情,因此你可以确信不要丢失任何 工作。 也可以试一试以下例子。用户为DUDLEY: 70岁。 无健康保险。 有人寿保险。 有$20,000的一个当前存款余额。 月收入为$3,000。 覆盖养老金计划。 无孩子。 当前拥有一座房子。 还有,对DUDLEY来说,准备一个对话全文,并列出答案。对于每一个答案,使用Joshua 的 解释断言性能去找出该答案是如何演绎出来的。显示这些事情并上交。 XIII. 练习2:知识工程实践 试一试以下例子。用户为ETHYL: 有健康和人寿保险。 有$20,000的一个当前存款余额。 月收入为$3,000。 覆盖养老金计划。 有一个孩子,23岁。 自己是68岁。 拥有一座房子 如果你认真地检查了对话,你就对看到系统会问一些有关大学学费的问题。但是具有仅有的 (因此是最年轻的)23岁的孩子,规则46会指示出没有孩子将考入大学。因此,它为什么会问学费 方面的问题? 看一看你是否可以检查出原因。使用Joshua’s 的跟踪机制去帮助你检查系统在此处是如何推理 的。试着画一张图,显示由后向链产生的树型结构,这可能会帮助你看到使用的逻辑并看到问题。 然后看一看你是否可以修复这个问题。一种好方法是修改引起问题的规则。另一种方法是试图 引入一条新规则。确定联系这两者的解答。评论这两种解答。就以下的知识工程和规则编写的理念 方面来讲,一个好于另一个吗? 你可能想试着通过对程序的知识库赋值来实现你的解答。你可以测试它们可否工作并且测试它 们对于各种输入的精确性和稳定性。提交你的解释和对问题的答案,以及你对我们看到的问题的 解答。如果你花了一张图或者编写了一些Joshua代码,也请显示出来。 XV. 练习3:观察规则 看一看规则goal-invest-spare-cash。关于它偶然发现了什么、该规则怎样与知识库中的其它规 则比较?该规则为什么是知识工程的好或坏例子?使用来源于讲稿和阅读材料的信息支持你的答案。 试图得到结果的规则是什么?你可以想出更好的方法做这个事情吗?提交你对问题的答案。请简短 一些。 - 8 -

6871问思集2 某些事情停止什么,何时停止 例如。很设你找到了系绕对你的应答结果如下: 品当:o好e Debugger top level te蓝goa 快到作反 有时,使州以下样子的一个达择列表将你同Xems窗口叶 4 照 尚2739p28eag0e0子19-5zo·505a-9z】 9
6.871 问题集 2 某些事情停止什么,何时停止 例如,假设你找到了系统对你的应答结果如下: 当你找到Lisp监听器窗口像这样作出反应时,请使用你的鼠标选择第一个ABORT(向Lisp监听器说 Return)。这将把你带回到监听器的顶级并且你可以再一次开始。请记住,Joshua 保存其数据库,以 至于关于在上面中断的运行的单个解答的问题将还存在。总之,系统不反复回答哪些问题;它从下 一个问题的任何内容继续。 有时,使用以下样子的一个选择列表将你返回到Xernacs窗口中: 当发生此事时,你使用:continue(即,colon-continue)和数字型的一个选择。通常,正确的选择是 说出Restart CLIMLisp监听器。在上面的例子中,它是第8行,所以你会输入::continue 8。然后 你可以回到Lisp监听器窗并继续工作: - 9 -

687引1问愿集2 THE KNOWLEDGE BASE RULESABOUT充足的本保险覆 -INADEQUATE 10 ADEQUATE 1 RULES ABOUT:你是合应该具有人寿保路 nce-YES 1.0 RUI.ES ABOUT选择娜一种类别的基金 Ca OTFNMONEY MARKET L -10-
6.871 问题集 2 THE KNOWLEDGE BASE RULES ABOUT: 充足的基本保险覆盖 1] if Have Health Insurance = NO then Basic Insurance Coverage = INADEQUATE 1.0 2] if Have Life Insurance = NO and Should Have Life Insurance = YES then Basic Insurance Coverage = INADEQUATE 1.0 3] if Have Health Insurance = YES and Have Life Insurance = YES then Basic Insurance Coverage = ADEQUATE 1.0 RULES ABOUT: 你是否应该具有人寿保险 4] if Married = YES or Have Children = YES then Should Have Life Insurance = YES 1.0 RULES ABOUT: 选择哪一种类别的基金 10] if Basic Insurance Coverage = INADEQUATE then Category Of Fund = NONE 1.0 11] if Current Savings 10 and Number Of Years To Retirement 20 then Category Of Fund = AGGRESSIVE .8 15] if Investment Goal = CHILDREN'S EDUCATION and Age Of Oldest Child < 7 then Category Of Fund = G&I .8 - 10 -