-
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-explode或sub-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参考指南。
随机文章:
CLIPS中文用户手册(31) 2009-10-20CLIPS中文用户手册(30) 2009-09-02CLIPS中文用户手册(29) 2009-08-30CLIPS中文用户手册(28) 2009-08-23CLIPS中文用户手册(27) 2009-08-19
收藏到:Del.icio.us







