/ / Vérification d'une propriété d'objet dans LHS - clips

Vérification d'une propriété d'objet dans LHS - clips

Je dois vérifier l'existence d'une valeur pour la propriété d'un "objet" dans un LHS.

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

Mais il me semble que le n ° 1 n'est pas valorisé en LHS. Au lieu de cela, si je le mets dans RHS, il retourne TRUE. Où est-ce que je me trompe?

THX, Nic

Réponses:

2 pour la réponse № 1

Utilisez l'élément conditionnel de test pour évaluer une expression dans le LHS d'une règle:

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

Il est préférable de récupérer explicitement la valeur de l’emplacement en la faisant correspondre au lieu d’utiliser l’accesseur d’emplacement, car cela ferait réévaluer la condition chaque fois que la valeur de l’emplacement changerait:

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