• 2009-04-23

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

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

    第七章 程序的控制

    当你年轻的时候,你被世界所控制,当你老的时候,你将控制世界。

    到目前为止,你已经学历了CLIPS的基本句法。现在,你将学习怎样将所学的句法应用到实际有用的程序当中去。同时,你还将会学到一些关于输入的新的句法,怎样比较变量和产生循环。

    读入函数

    除了模式匹配外,规则还可以通过其他方式获取信息。CLIPS可以通过使用读入函数(read function)来读入用户输入的键盘信息。

    下面是使用(read)命令来输入数据的例子。注意(read)命令在新的一行中插入光标后并不需要多余的(crlf)(read)自动将光标重置到新的一行中。

     

    CLIPS>(clear)

    CLIPS>(defrule read-input

    =>

    (printout t “Name a primary color” crlf)

    (assert (color (read))))

    CLIPS>

    (defrule check-input

    ?color <- (color ?color-read&red|yellow|blue)

    =>

       (retract ?color)

       (printout t “Correct” crlf))

    CLIPS>(reset)

    CLIPS>(agenda)

    0            read-input:*

    For a total of 1 activation.

    CLIPS>(run)

    Name a primary color

    green

    CLIPS>              ; 没有打印出“correct

     

     

    上面的规则中,在RHS中使用键盘输入,不用指定任意LHS中的模式就可以非常方便的被触发,且当(reset)出现后自动的被激活。当输入(agenda)命令后,读入规则的激活将被显示,打印一个*号,而不是像事实标识符,如f-1*号的使用用来表示该模式不用指定事实,均可满足。

    (read)函数并不是可以读入所有键盘输入的通用函数,它仅能读入一个字段。所以,当你想读入下面的:

     

    primary color is red

     

    那么,只有第一个字段“primary”能被读入。如果你想读入所有的字段,那么必须使用双引号将其包含起来。当然,一旦使用了双引号,那么就会被当作一个单字符串。然后可以通过str-explodesub-string function访问子字符串,如“primary”,“color”,“is”和“and”。

    (read)的第二个限制是不能输入圆括号,除非使用双引号。就像不能声明一个包含圆括号的事实一样,也不能使用(read)直接读入圆括号。

    readline函数被用来读入多值,直到输入回车键为止。该函数将读入的数据作为一个字符串。为了声明(readline)数据,(assert-string)函数用来声明一个非字符串事实,就像用(readline)输入。(assert-string)例子如下:

     

    CLIPS>(clear)

    CLIPS>(assert-string “(primary color is red)”)

    <Fact-1>

    CLIPS>(facts)

    f-0 (initial-fact)

    f-1 (primary color is red)

    For a total of 2 facts.

    CLIPS>

     

    (assert-string)的参数必须是一个字符串,下面的例子是使用(readline)来声明一个多字段事实。

     

    CLIPS>(clear)

    CLIPS>(defrule test-readline

    =>

    (printout t “Enter input” crlf)

    (bind ?string (readline))

    (assert-string (str-cat “(” ?string “)”)))

    CLIPS>(reset)

    CLIPS>(run)

    Enter input

    Primary color is red

    CLIPS>(facts)

    f-0 (initial-fact)

    f-1 (primary color is red)

    For a total of 2 facts.

    CLIPS>

     

    因为(assert-string)声明要求字符串被圆括号括住,(str-cat)用来将括号括住字符串?string

    (read)(readline)还可以被用来读入文件信息,通过指定文件的逻辑名作为其参数。了解更多的信息,请参看CLIPS参考指南。

     


    历史上的今天:

    塞班的风景 2009-04-23
    Keyworks of Plan 2008-04-23
    半生缘 2007-04-23

    收藏到:Del.icio.us