2016-05-09 112 views
0

我需要檢查LHS中某個o'bject屬性的值是否存在。檢查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中,它會返回TRUE。 我錯在哪裏?

THX, 尼克

回答

2

使用測試條件元素在規則的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)) 
+0

如果'property'是對另一個insta的引用會怎麼樣nce,如果我想獲得該實例的屬性?換句話說,我如何從與另一個實例'b'關聯的實例'a'獲得某個屬性? – stackoverflowwww

+0

我創建了一個關於我上面的評論的新問題:http://stackoverflow.com/questions/42856745/clips-accessing-a-property-of-a-property – stackoverflowwww