2016-08-30 3 views
1

J'ai écrit cette règle pour un système expert:CLIPS LHS correspondent multislot

(defrule wild chicory 
     (attribute (name habitat) (value sea montain grassland unknown)) 
=> 
     (assert (plant "Cichorium_Intybus")) 
    ) 

Cependant, je ne veux pas la valeur de l'habitat pour correspondre à toutes les valeurs que j'ai donné, mais seul match au moins un des valeurs. Je me demande comment je devrais faire cela. Je pourrais le faire ainsi:

(defrule wild chicory 
      (or (attribute (name habitat) (value sea)) 
       (attribute (name habitat) (value mountain)) 
       (attribute (name habitat) (value grassland)) 
       (attribute (name habitat) (value unknow)) 
     ) 
      => 
      (assert (plant "Cichorium_Intybus")) 
) 

Mais je voudrais savoir s'il y a une meilleure solution. Merci

Répondre

0

Si la valeur est une seule fente de champ, faites-le de cette façon:

(defrule wild chicory 
    (attribute (name habitat) (value sea | mountain | grassland | unknown)) 
    => 
    (assert (plant "Cichorium_Intybus"))) 

Si la valeur est une fente de terrain multi, le faire de cette façon:

(defrule wild chicory 
    (attribute (name habitat) (value $? sea | mountain | grassland | unknown $?)) 
    => 
    (assert (plant "Cichorium_Intybus")))