clips defrule不';行不通

clips defrule不';行不通,clips,expert-system,Clips,Expert System,我有一个包含url本身和整数计数器的url模板: (deftemplate url_t (slot counter (type INTEGER) (default 0)) (slot url (type STRING) (default ""))) 如果计数器值>0,我将尝试定义打印url字符串的规则 (defrule print-url (url_t (counter ?counter) (url ?url)) (test (> ?counter 0)) => (

我有一个包含url本身和整数计数器的url模板:

(deftemplate url_t
(slot counter
(type INTEGER)
(default 0))
(slot url
(type STRING)
(default "")))
如果计数器值>0,我将尝试定义打印url字符串的规则

(defrule print-url
    (url_t (counter ?counter) (url ?url))
    (test (> ?counter 0))
=>
(printout t "url is " ?url crlf)
)
但当我尝试更改url\u t的值时: (断言url(计数器2)(url“你好”))
该规则未执行。我的错误在哪里?

如果描述中的assert语句与您输入的完全相同,那么这就是您的问题,因为语法无效。除此之外,deftemplate或defrule的语法没有问题:

CLIPS> (clear)
CLIPS> (unwatch all)
CLIPS> 
(deftemplate url_t
   (slot counter
      (type INTEGER)
      (default 0))
   (slot url
      (type STRING)
      (default "")))
CLIPS> 
(defrule print-url
   (url_t (counter ?counter) (url ?url))
   (test (> ?counter 0))
   =>
   (printout t "url is " ?url crlf))
CLIPS> (assert (url_t (counter 2) (url "hello hello")))
<Fact-1>
CLIPS> (facts)
f-0     (initial-fact)
f-1     (url_t (counter 2) (url "hello hello"))
For a total of 2 facts.
CLIPS> (agenda)
0      print-url: f-1
For a total of 1 activation.
CLIPS> (run)
url is hello hello
CLIPS> (modify 1 (counter 3) (url "goodbye goodbye"))
<Fact-2>
CLIPS> (agenda)
0      print-url: f-2
For a total of 1 activation.
CLIPS> (run 1)
url is goodbye goodbye
CLIPS> (modify 2 (counter 0) (url "won't fire"))
<Fact-3>
CLIPS> (agenda)
CLIPS> 
剪辑>(清除)
剪辑>(全部取消剪辑)
剪辑>
(定义模板url)
(投币台)
(整型)
(默认值为0)
(插槽url)
(输入字符串)
(默认为“))
剪辑>
(defrule打印url)
(url_t(计数器?计数器)(url?url))
(测试(>?计数器0))
=>
(打印输出“url为”?url crlf))
剪辑>(断言(url\u t(计数器2)(url“你好”))
剪辑>(事实)
f-0(初始事实)
f-1(url_t(柜台2)(url“你好”))
总共有两个事实。
剪辑>(议程)
0打印url:f-1
总共激活1次。
剪辑>(运行)
url是hello hello
剪辑>(修改1(计数器3)(url“再见”))
剪辑>(议程)
0打印url:f-2
总共激活1次。
剪辑>(运行1)
url是再见
剪辑>(修改2(计数器0)(url“不会触发”))
剪辑>(议程)
剪辑>

谢谢。你知道我能否给事实1一个符号名,然后用符号名收回它吗?