【问题标题】:clips defrule doesn't work剪辑 defrule 不起作用
【发布时间】:2014-08-02 15:02:09
【问题描述】:

我有包含 url 本身和整数计数器的 url 的 deftemplate:

(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_t 的值时: (assert url_t (counter 2) (url "hello hello")) 不执行规则。我的错误在哪里?

【问题讨论】:

    标签: clips expert-system


    【解决方案1】:

    如果您描述中的断言语句正是您输入的内容,那么这就是您的问题,因为语法无效。除此之外,您的 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> 
    

    【讨论】:

    • 谢谢。知道我是否可以给出事实 1 符号名称并通过符号名称收回它吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-05
    相关资源
    最近更新 更多