使用 OR 组中的绑定模式变量来测试 CLIPS 规则中的条件元素

Using bound pattern variables from an OR group to test conditional elements in CLIPS rules

我基本上想创建 1 个规则,如果 2 个事实中的任何一个高于某个值,该规则就会触发,即具有以下 LHS 的规则:

(or
    (object-0 (value ?x))
    (object-1 (value ?y))
)

(test
    (or
        (> ?x 1)
        (> ?y 2)
    )
)

问题 是如果这些对象之一不存在,这将不起作用。这非常有意义,因为您无法对甚至不存在的变量进行操作。

真的希望避免将其拆分为 2 个单独的规则,除非万不得已。有什么办法吗?也许有一些骇人听闻的(存在的)陈述?

         CLIPS (6.31 6/12/19)
CLIPS> 
(deftemplate object-0 
   (slot value))
CLIPS>    
(deftemplate object-1 
   (slot value))
CLIPS> 
(defrule example-1
   (or (object-0 (value ?x&:(> ?x 1)))
       (object-1 (value ?y&:(> ?y 2))))
   =>)
CLIPS> 
(defrule example-2
   (or (and (object-0 (value ?x))
            (test (> ?x 1)))
       (and (object-1 (value ?y))
            (test (> ?y 2))))
   =>)
CLIPS> 
(defrule example-3
   (exists (or (object-0 (value ?x&:(> ?x 1)))
               (object-1 (value ?y&:(> ?y 2)))))
   =>)
CLIPS> (assert (object-0 (value 3)) (object-1 (value 4)))
<Fact-2>
CLIPS> (agenda)
0      example-1: f-2
0      example-2: f-2
0      example-1: f-1
0      example-3: *
0      example-2: f-1
For a total of 5 activations.
CLIPS>