在 LHS 中检查对象 属性

Checking a object property in LHS

我需要在 LHS 中检查对象 属性 的值是否存在。

(defrule check-property
    ?room <- (object (is-a ROOM))
    (integerp (send ?room get-property))   ; #1
    =>
    (printout ?*debug-print* "Room " ?room " has property"  crlf))

但在我看来,#1 在 LHS 中未被估值。相反,如果我把它放在 RHS 中,它 returns TRUE。 我哪里错了?

谢谢, 尼克

使用测试条件元素评估规则的 LHS 中的表达式:

(defrule check-property
    ?room <- (object (is-a ROOM))
    (test (integerp (send ?room get-property)))
    =>
    (printout ?*debug-print* "Room " ?room " has property"  crlf))

最好通过匹配而不是使用槽访问器来显式检索槽值,因为这将导致在槽值更改时重新评估条件:

(defrule check-property
    ?room <- (object (is-a ROOM)
                     (property ?property))
    (test (integerp ?property))
    =>
    (printout ?*debug-print* "Room " ?room " has property"  crlf))