2015-09-22 2 views
0

J'ai essayé de lire des tutoriels sur Jess, mais je ne trouve rien de très utile. Je veux construire un programme qui découvre de quel instrument je parle. Donc, si un instrument a des cordes, nous savons que l'instrument est dans la catégorie des cordes ou des percussions (c'est-à-dire le piano). Comment est-ce que j'écrirais une règle qui sauve un fait disant que la catégorie est soit la percussion ou les chaînes basées sur ce critère?Comment ajouter des faits à travers les règles de Jess?

J'ai considéré la liaison, mais ne lie pas signifie que je devrais avoir une variable distincte pour chaque catégorie potentielle? Ou, devrais-je utiliser un assert?

Répondre

2

Ceci montre comment insérer un fait dans une règle pour stocker un ensemble de catégories possibles.

(deftemplate Instrument (slot strings)) 
(deftemplate Classification (multislot category)) 
(defrule cat-by-strings 
    ?i <- (Instrument (strings ?s&:(> ?s 0))) 
=> 
    (assert (Classification (category STRING PERCUSSION))) 
) 
(assert (Instrument (strings 18))) 
(run) 
(facts) 

Sortie:

f-0 (MAIN::initial-fact) 
f-1 (MAIN::Instrument (strings 18)) 
f-2 (MAIN::Classification (category STRING PERCUSSION)) 
For a total of 3 facts in module MAIN. 

En utilisant des variables liées est inutile car ils sont limités au contexte d'une règle.