CLIPS:类实例匹配周围没有条件元素

时间:2018-07-13 11:49:46

标签: clips

我读到了

  

CLIPS还使您能够在LHS上指定显式的非条件元素。   在LHS上,使用“非”条件元素将不存在事实指定为模式。

但是,下面的代码给了我[PRNTUTIL2] Syntax Error: Check appropriate syntax for the not conditional element.

(not
    (object (is-a clips_ASDF)
        (name ?some_name)
        (property ?my_property_var))
    (test (eq ?my_property_var nil)))

但这不会导致错误:

    (object (is-a clips_ASDF)
        (name ?some_name)
        (property ?my_property_var))
    (not
        (test (eq ?my_property_var nil)))

那是为什么?我该如何做?

2 个答案:

答案 0 :(得分:2)

条件元素只能包含一个条件元素。如果要放置多个,请用条件元素包围它们:

   (not (and (object (is-a clips_ASDF)
                     (name ?some_name)
                     (property ?my_property_var))
             (test (eq ?my_property_var nil))))

或者,不需要单独的 test 条件元素:

   (not (object (is-a clips_ASDF)
                (name ?some_name)
                (property nil)))

答案 1 :(得分:1)

这应该满足您的需求:

(defrule my-rule      
    (object (is-a clips_ASDF) (name ?some_name) (property ?my_property_var)&:(neq ? my_property_var nil))
    =>
    (printout t "done" crlf))