在 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))
我需要在 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))