2015-09-27 4 views
1

У меня возникли проблемы с пониманием того, как работает CLIPS. Мне нужно получить aswer как «mooo -> cow». И это код, который у меня есть.Непонимание функций CLIPS. Не удается найти правильный ответ

(deftemplate animal (slot name)(slot sound)) 

(deffacts Input_animal 
    (animal(name cow)(sound mooo)) 
    (animal(name dog)(sound barf)) 
    (animal(name cat)(sound meuw)) 
    (animal(name sheep)(sound me-e-e)) 
    (animal(name duck)(sound cuack)) 
    ) 

(defrule sound_animal 
    (sound ?x) 
    (animal(name ?animal)(sound ?x)) 
    => 
    (printout t ?animal crlf) 
) 

(defrule no_sound_animal 
    (sound ?x) 
    (not(animal(name ?animal)(sound ?x))) 
    => 
    (printout t ?x => "the animal doesn't exist" crlf) 
) 
. 

Тогда я положил это на консоли: (правила часы) (смотреть факты) (часы вызовов) (сброс) (запустить) (sound_animal (звук Mooo))

И я получаю этот ответ: [EXPRNPSR3] Miising объявления функции для звука

хорошо ... Я был сматривая somethng как «животное -> корову» Может кто-нибудь от Гепа мне с этим? Я знаю, что это должно быть просто, но я застрял ... Спасибо!

ответ

2

Вы не определили функцию с именем sound_animal или sound, поэтому попытка вызвать эти функции приведет к возникновению ошибки.

CLIPS> (sound_animal (sound mooo)) 

[EXPRNPSR3] Missing function declaration for sound_animal. 
CLIPS> (deffunction sound_animal()) 
CLIPS> (sound_animal (sound mooo)) 

[EXPRNPSR3] Missing function declaration for sound. 
CLIPS> 

Используйте команду утверждать, чтобы создать звуковой факт, чтобы вызвать правило sound_animal: (утверждают (звук мычания)). Команда assert является специальной формой, в которой круглые скобки, которые следуют за именем функции assert, используются для ограничения отношения фактов и его слотов, а не представления вызова функции звуковой функции с аргументом moo.

CLIPS> 
(deftemplate animal (slot name)(slot sound)) 
CLIPS> 
(deffacts Input_animal 
    (animal(name cow)(sound mooo)) 
    (animal(name dog)(sound barf)) 
    (animal(name cat)(sound meuw)) 
    (animal(name sheep)(sound me-e-e)) 
    (animal(name duck)(sound cuack)) 
    ) 
CLIPS> 
(defrule sound_animal 
    (sound ?x) 
    (animal(name ?animal)(sound ?x)) 
    => 
    (printout t ?animal crlf)) 
CLIPS> 
(defrule no_sound_animal 
    (sound ?x) 
    (not(animal(name ?animal)(sound ?x))) 
    => 
    (printout t ?x => "the animal doesn't exist" crlf)) 
CLIPS> (watch rules) 
CLIPS> (watch facts) 
CLIPS> (reset) 
<== f-0  (initial-fact) 
==> f-0  (initial-fact) 
==> f-1  (animal (name cow) (sound mooo)) 
==> f-2  (animal (name dog) (sound barf)) 
==> f-3  (animal (name cat) (sound meuw)) 
==> f-4  (animal (name sheep) (sound me-e-e)) 
==> f-5  (animal (name duck) (sound cuack)) 
CLIPS> (assert (sound mooo)) 
==> f-6  (sound mooo) 
<Fact-6> 
CLIPS> (run) 
FIRE 1 sound_animal: f-6,f-1 
cow 
CLIPS> 
+0

спасибо! Это мне очень помогает! :П – Peyu