2017-03-15 5 views
1

Je sais qu'il existe plusieurs fonctions de prédicat qui permettent de tester si une variable est d'un certain type. Par exemple,CLIPS: Comment tester si le type d'une variable est une certaine classe?

(test (integerp ?my_var)) 

retours TRUE si my_var est de type entier. Dire que j'ai une classe A. Comment tester si une variable est de type A? Autrement dit, je veux tester si ?my_var est une instance de A.

Je cherche quelque chose comme ceci:

(test (instance_of_A_p ?my_var)) 

ou

(test (is-a (?my_var A)) 

Répondre

2

Utilisez la fonction de type:

CLIPS> (bind ?a 3) 
3 
CLIPS> (type a) 
SYMBOL 
CLIPS> (defclass A (is-a USER)) 
CLIPS> (bind ?a (make-instance a1 of A)) 
[a1] 
CLIPS> (type ?a) 
A 
CLIPS> (eq (type ?a) A) 
TRUE 
CLIPS> 

Donc dans la LHS de la règle:

(test (eq (type ?a) A))