CLIPS中文用户手册

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

CLIPS用户向导水银测试版2007.12.31JosephC.Giarratano,Ph.D.自述文件通往智慧的第一步是你得承认你的无知,其次是你不必让全世界都知道你的无知。这部分被称作序言,但是在还没有人读过它之前,我将它重新命名成一个惯用的标题,以便让计算机用户选择性的遵从。另一个建议是将之命名为:“别读我”章节,但如今的人们相信所有他们阅读过的一切,我恐怕他们真的就不读它了。序言的目的,噢,抱歉,我应该称之为自述文件,它提供了书本中所包含知识的元知识。之所以称谓为元知识,是指它是关于知识的知识。所以关于自述文件的描述事实上我们得称之为“元元知识”。如果你被搞糊涂了或者你对这些不感冒,那么你可以跳开去选择从书中任何地方看起,因为我得照顾到所有我的读者。CLIPS是什么?CLIPS是一种专家系统工具,最初由NASA/LyndonB.Johnson太空中心软件技术研究室开发出来。自1986年首次发布以来,CLIPS经历了不断的改进和完善。现在它已经被广泛的应用在数以万计的全球用户中。CLIPS被开发出来以促进集成人类知识和经验的软件发展。在CLIPS中,知识的表示有三种方式:规则,规则表示法是基于启发式经验知识库的首要选择。自定义函数和通用函数,这种方式是程序式知识表示的首选。面向对象设计,也是程序式知识表示的首选。面向对象的程序设计被支持的5个普遍接受的特征是:类,消息处理函数,抽象,封装,继承和多态性。模式匹配可以是对象和事实。你可以仅用规则,或者仅用对象或者两者混合使用来开发软件。CLIPS同时支持与其他语言的集成,如C和Java。事实上,CLIPS是CLanguageIntegratedProduction的缩写。规则能基于事实与对象的匹配,规则和对象同时组成了一个集成系统。除了被当作一个独立的工具之外,CLIPS还能被程序语言调用,运行其函数,然后返回给调用函数控制权。同样的,程序代码也能作为一个外部函数在CLIPS中被定义和调用。当外部代码执行完毕后,控制权返回到CLIPS。如果你已经对面向对象的程序设计语言如C++,Smalltalk,ObjectiveC或者Java很熟悉了,想必你已经了解面向对象在软件开发中的诸多优点了。如果你并不熟悉,你将会发现CLIPS是一款将面向对象概念贯彻于软件开发非常优秀的工具。这本书关于什么?CLIPS用户向导是一个介绍CLIPS的基本特征的指南,而不是打算对该工具做一个广泛的探讨。本书姐妹篇为CLIPS参考手册,它提供关于该话题的所有广泛的探讨和更多其它内容。这本书的适用读者群?CLIPS用户向导的目的是对专家系统提供简单易懂的介绍,适用读者可能对专家系统一无所知或者知之甚少。CLIPS用户向导可以被用作教材或者自学材料。仅有的前提是你必须具备高级语言如Java,Ada,FORTRAN或者C的基本知识。(好的,基本不是指其他的,但是如果被问起,我们不会在公开场和下承认和取消其声明。)怎样使用这本书?CLIPS用户向导为那些想亲身尝试专家系统编程的人们提供了快速入门。例子均具有普遍性。同时,我们知道学习一种新的计算机语言是一个令人沮丧的体验,因此,本书的写作语言将采用轻快和幽默的风格(我希望如此),以代替中规中矩的教科书模式。但愿,这种幽默不会冒犯有幽默感的任何人。为了最大受益,你最好是在看书的过程中,将书中的实例亲自在文本中打印出来。在你打印实例的过程中,你将会逐渐明白程序的工作原理和当你打错时出现的错误提示。案例的结果输出在案例之后给出。最后,当你看完CLIPS用户向导各章节后,你还应该看看在CLIPS参考手册中的相关材料。像其他程序语言一样,你只有亲自写程序才能够真正学好CLIPS编程。为了真正学会专家系统编程,你应该多在CLIPS中写程序,并对每个问题抱有兴趣。感谢我十分感谢那些对本书提出意见和评述的人。谢谢GaryRiley,ChrisCulbert,BrianDantes,BryanDulock,StevenLewis,AnnBaker…(一堆外国人名)。特别感谢BobSavely对CLIPS改进的支持。第一章事实如果你忽视事实,你将永远不会担心自己的过错。本章将对专家系统的基本概念做简单的介绍。你将会知道在CLIPS中怎样插入和移出事实。如果你正在使用的机器是苹果机或者是IBM(或可兼容)的CLIPS视窗版本,那么你可以通过鼠标来选择相关的命令来代替输入命令行。键盘上的箭头键也可以移动光标对菜单选项进行选择。序言CLIPS是一种被用来编写专家系统应用程序的计算机语言。专家系统是一组计算机程序,专门用来模仿人类专家的技能和知识。相比之下,一些普通的程序如报表程序,文本处理器,电子表格,电脑游戏等等,并没有包含人类的技能和知识。(专家的定义之一:就是某人带着他的公文包在离家50公里之外。)CLIPS之所以被称之为专家系统工具,是因为它是一个开发专家系统的完整环境,包括一个整合版本和一个调试工具。壳这一词被保留在CLIPS负责推理的部分中。CLIPS的壳提供了专家系统的基本元素:1.事实表和实例表:数据的全局存储。2.数据库:包括所有的规则和规则表。3.推理机:控制所有规则的执行。CLIPS的程序一般包含有规则,事实和对象。推理机决定了哪条规则应该被执行和在什么时候被执行。一个用CLIPS写成的基于规则库的专家系统程序是一个数据-驱动型程序,程序里的事实,对象数据通过推理机的激活执行。这里有一个例子可以帮助你知道CLIPS是如何与其他程序语言如Java,Ada,BASIC,FORTRAN和C区别开来的。在程序语言中,执行并不一定需要数据,那是因为在那些语言中的声明已经足够引起执行了。举例说明,在BASIC语言中,PRINT2+2的声明会被立即执行,该声明是一个完整的声明,并不需要额外的数据去驱动执行。然而,在CLIPS中,规则的执行必需数据来驱动。最初,CLIPS仅有表示规则和事实的能力,然而,在6.0版本中已经允许规则与对象的匹配,与规则与事实匹配一样。同时,通过发送消息来应用对象不必需要规则了,如果你仅仅只是用对象,那么推理机都可以不需要。在第一章到第七章中,我们将讨论CLIPS的事实和规则,八到十二章中包含了CLIPS的对象特点。开始和结束你可以在你的系统中输入相应的运行代码来启动CLIPS,你将看到CLIPS的提示如下所示:CLIPS此时,你可以开始在CLIPS中直接输入命令,这种直接输入命令的方式被称之为最高阶层。如果你拥有CLIPS的图形界面版本(GUI),你也可以用鼠标选择相应的菜单来代替输入命令行。请参考CLIPSGUI版本的CLIPS界面向导,探讨一下其里面的命令支持。在本书中,为了简约和一致性,我们假设所有的命令均为输入方式。离开CLIPS的一般方式是输入exit命令,如下:(exit)按照CLIPS提示点击返回键。建表与其他编程语言一样,CLIPS也有关键字。举个例子,如果你想在事实表中输入数据,你可以使用assert命令。作为一个assert实例,在CLIPS提示后面正确输入下面的命令:CLIPS(assert(duck))这里,assert命令以(duck)作为其参数。记住点击回车键将命令行发送到CLIPS。你将看到如下响应:Fact-1这表示CLIPS已经存储了duck的事实,并将其标识为1。在CLIPS中,尖括弧被用来作为条目的分隔符。CLIPS会自动的增加事实的编号,随着一个或更多的事实被添加,从最高事实-索引进行列表。注意(assert)和它的参数(duck)均用圆括弧括住,像其他一些专家系统语言一样,CLIPS采用LISP式样语法,用圆括弧作为分隔符。虽然CLIPS并不是采用LISP语言编写,但是LISP影响了CLIPS的发展。检查两遍假设你想查看一下事实表中的内容,如果你的CLIPS支持GUI,你便可以在菜单中选择相应的命令,或者,你还可以通过键盘键入相应的命令行。接下来,我们将来描述一下键盘命令。查看事实库的键盘命令是facts命令。在CLIPS提示后输入(facts),CLIPS响应后会将事实表列出。一定记得将命令用圆括弧括住,否则CLIPS会不识别。在该实例中,(facts)命令的句法如下:CLIPS(facts)f-0(initial-fact)f-1(duck)Foratotalof2facts.CLIPSf-0和f-1为CLIPS对事实分配的事实标识。每个事实被添加进CLIPS,被分配唯一的事实标识,以“f”开头,后面的数字为事实索引。当启动CLIPS,输入如clear或reset(随后有详细的探讨)后,事实索引将会被归零,然后随着每个事实的添加(assert)逐步加一。(clear)和(reset)命令同时增加一个(initial-fact)事实,编号为f-0。在CLIPS的早期版本中,该事实被CLIPS隐式用来初始化一些规则和被用户显式调用来使事实库初始化,但是现在,该事实仅被用来提供向后兼容性。如果你将duck在事实表中输入两次,将会出现什么结果呢?让我们试试看,增加一个新事实(duck),然后调用(facts)命令如下所示:CLIPS(assert(duck))FALSECLIPS(facts)f-0(initial-fact)f-1(duck)Foratotalof2facts.CLIPSCLIPS返回FALSE消息,表示不可能执行该条命令,且你将只能见到原始的事实:“f-1(duck)”。这说明CLIPS不能接受事实的复制输入。然而,CLIPS中还有一个超越命令:set-fact-duplication,该命令允许事实的重复输入。当然,你可以输入其他不同的事实。举个例子,增加一个(quack)事实,然后运行(facts)命令,如下:CLIPS(assert(quack))fact-2CLIPS(facts)f-0(initial-fact)f-1(duck)f-2(quack)Foratotalof3facts.CLIPS注意,(quack)事实已经被添加到事实表中了。事实也会被移出和撤销。当一个事实被撤销,其他的事实索引不会改变,因此会出现事实索引的“丢失”。类似于一个足球运动员离开球队如果没有被补充,其他队员的号码不会因为缺失号码而发生调整(除非他们非常讨厌这个离队的家伙,想要忘掉他曾在队中效力过)。清除所有事实Clear命令将所有的事实从内存中移出,代码如下所示:CLIPS(facts)f-0(initial-fact)f-1(duck)f-2(quack)Foratotalof3facts.CLIPS(clear)CLIPS事实表中的所有事实被清除。(clear)命令实质上将CLIPS恢复到起始启动状态,它清除了CLIPS的内存空间,重置事实标识为0和增加了一个(initial-fact)事实。增加(animal-isduck)事实,然后查看事实表,会发现(animal-isduck)的事实标识为f-1,这是因为(clear)命令重置了事实表的标识。该命令事实上并不只是起清除所有事实的作用,除此之外,它还清除所有的规则,在下一章中你就会看到。下面的实例显示了怎样将三个事实加入到事实表,并用(facts)命令查看,然后(clear)命令将这三个事实从内存中清除并重置事实标识为f-0。CLIPS(clear)CLIPS(assert(a)(b)(c))Facts-3CLIPS(facts)f-0(initial-fact)f-1(a)f-2(b)f-3(c)Foratotalof4facts.CLIPS(facts0)f-0(initial-fact)f-1(a)f-2(b)f-3(c)Foratotalof4facts.CLIPS(facts1)f-1(a)f-2(b)f-3(c)Foratotalof3facts.CLIPS(facts2)f-2(b)f-3(c)Foratotalof2facts.CLIPS(facts1

1 / 131
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功