2015-09-22 13 views
0

Я пробовал читать учебники о Джессе, но я не могу найти ничего очень полезного. Я хочу создать программу, которая узнает, с каким инструментом я говорю.Как добавить факты через правила в Джесс?

Итак, если у инструмента есть строки, мы знаем, что инструмент находится либо в строках, либо в перкуссии (т.е. фортепиано). Как я могу написать правило, которое сохраняет факт, говоря, что категория является либо перкуссией, либо строками на основе этих критериев?

Я считал связывание, но не связывал среднее, что мне пришлось бы иметь отдельную переменную для каждой потенциальной категории? Или я должен использовать утверждение?

ответ

2

Это показывает, как вставить факт из правила, чтобы сохранить набор возможных категорий.

(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) 

Выход:

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. 

Использование связанных переменных бесполезно, поскольку они ограничены к контексту правила.