• 2009-05-06

    CLIPS中文用户手册(23) - [日志纪事]

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://penning.blogbus.com/logs/38990286.html

    查看

    CLIPS提供了许多查看类信息的函数,如谓语函数,用来检测一个类是否为另一个类的超类或子类。

    如果<class1><class2>超类,superclassp函数返回TRUE,否则返回FALSE。如果<class1><class2>的子类,subclassp函数返回TRUR,否则返回FALSE。两函数的通用格式为:

     

    (function <class1><class2>)

     

    举个例子:

     

    CLIPS>(superclassp UPPIE YUPPIE)

    TRUE

    CLIPS>(superclassp YUPPIE UPPIE)

    FALSE

    CLIPS>(subclassp YUPPIE UPPIE)

    TRUE

    CLIPS>(subclassp UPPIE YUPPIE)

    FALSE

    CLIPS>

     

    现在,让我们检查一下CLIPS是否接受了所有的新类。一种方式是通过执行list-defclasses命令。下面是该命令的输出:

     

    CLIPS>(list-defclasses)

    FLOAT

    INTEGER

    SYMBOL

    STRING

    MULTIFIELD

    EXTERNAL-ADDRESS

    FACT-ADDRESS

    INSTANCE-ADDRESS

    INSTANCE-NAME

    OBJECT

    PRIMITIVE

    NUMBER

    LEXEME

    ADDRESS

    INSTANCE

    USER

    INITIAL-OBJECT

    UPPIE

    CHILD

    SUPPIE

    MUPPIE

    YUPPIE

    PUPPIE

    YUKKIE

    For a total of 24 defcalsses.

    CLIPS>

     

    注意(list-defclasses)命令不会指示出分层类的结构。也就是说,该命令不会指示出某个类是另外一个类的超类或子类。

    如果你往该表的下面看,你会看到所有你输入的用户自定义类:UPPIE,CHILD,YUPPIE,MUPPIE,SUPPIE,PUPPIEYUKKIE。除了已经讨论的预定义系统类OBJECTUSER外,还有许多其他的预定义类。你应该像熟悉前几章所学的CLIPS类一样知道它们的名字。CLIPS的预定义类型同样也被作为类来定义,这样它们就可以使用COOL了。

    1.7CLIPS参考指南中的一般继承图表,里面的箭头指向子类。

    Fig.1.7  The Predefined CLIPS Classes

       OBJECT类为树的根,由分支(branches)与子类相连。术语分支,边缘(edge),链接和弧(arc)是基本同类名词,它们均指代节点之间的连接。每个子类比它的超类要低一级。类由层级(level)编号。根类OBJECT0级。

       大级别数意味着高度定制(specificity)。术语specificity意味着类限制性越强。举个例子,LEXEMESYMBOLSTRING的超类。如果你知道一个对象是LEXEME类,那么你就知道它只可能是SYMBOLSTRING。然而,如果一个对象是SYMBOL,那么它不可能是STRING,反之亦然。因此,SYMBOLSTRING类要比LEXEME更特殊。

    browse-classes命令以首行缩进格式显示了类的层级。

     

    CLIPS>(browse-classes)

    OBJECT

       PRIMITIVE

          NUMBER

             INTEGER

             FLOAT

          LEXEME

             SYMBOL

             STRING

          MULTIFIELD

          ADDRESS

             EXTERNAL-ADDRESS

             FACT-ADDRESS

             INSTANCE-ADDRESS *

          INSTANCE

             INSTANCE-ADDRESS *

             INSTANCE-NAME

       USER

          INITIAL-OBJECT

          UPPIE

             SUPPIE

             MUPPIE

             YUPPIE

               PUPPIE

               YUKKIE *

          CHILD

             YUKKIE *

    CLIPS>

     

    类名后面的星号指示它有多个超类。

    (browse-classes)命令有一个可选参数,用来指定你想从哪个类开始查看。这对于当你对表中一些其他类不感冒时,非常方便。下面的例子阐述了怎样显示图1.6中部分YUPPIE图表,子树(subtrees)或子图表(subgraphs)依据来自树或图表中的节点和链接。

     

    CLIPS>(browse-classes UPPIE)

    UPPIE

      SUPPIE

      MUPPIE

      YUPPIE

    PUPPIE

    YUKKIE *

    CLIPS>(browse-classes YUPPIE)

    YUPPIE

      PUPPIE

      YUKKIE *

    CLIPS>(browse-classes YUKKIE)

    YUKKIE *

    CLIPS>


    收藏到:Del.icio.us




    评论

  • 胡老师,家乡的论坛需要你,武穴人论坛的大门时刻向你开放!
    企鹅主义回复武穴人说:
    谢谢朋友们的关心,最近有些忙哦。
    2009-05-18 11:13:39
  • 胡老师竟然是搞这个的,同时又懂许多,历害
    我是NPC,小店在正街邮政局对面丁家巷口,有空来坐坐,听听歌,看看电影.
    企鹅主义回复npc说:
    呵呵,npc有心,还逛到我这里来了。我也是没事找点事做做,懂的东西也是星星点点,不成体统,见笑了。
    回家一定去你店拜访!
    2009-05-11 21:21:18
  • 楼主加油。我跟你一样也在研究clips,曾经也看了用户手册,也有过把它翻译出来的想法,不过最终没有勇气去尝试,呵呵。谢谢你的工作和分享。
    企鹅主义回复lqy说:
    呵呵,工作量还是相当大的,需要时间。有机会,多多交流。
    2009-05-11 21:16:51