2016-05-09 12 views
0

LHSのoオブジェクトのプロパティの値の存在をチェックする必要があります。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に入れて、それは真を返します。 どこが間違っていますか?

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

「プロパティ」が別のinsta nceと、そのインスタンスのプロパティを取得したい場合は?つまり、別のインスタンス「b」に関連付けられているインスタンス「a」から特定のプロパティを取得するにはどうすればよいですか? – stackoverflowwww

+0

私は上記のコメントに関する新しい質問を作成しました:http://stackoverflow.com/questions/42856745/clips-accessing-a-property-of-a-property – stackoverflowwww

関連する問題