2015-03-24 4 views
0

когда я пытаюсь вызвать defrule, которые были использованы уже, клипса остановки ..Вернитесь к вышеупомянутому правилу в клипах

некоторых defrule необходимости использовать более чем один раз, есть ли способ сделать это

здесь является примером

(

defrule choice-in-powerPlant2 
(powerPlant2-question) 
=> 
(printout t "Are Filter and Carburetor Air working fine(y/n)?" crlf) 
(bind ?response (check-YNoptions-input)); Get user input on type of questions 
(if (eq ?response y) 
    then 
    (assert (powerPlant1-question) 
    ) 
) 

(if (or(eq ?response q) (eq ?response Q)) 
    then 
(output-exitmessage) 

) 

(if (eq ?response n) 
    then 
     (printout t "Have you fixed this(y/n)?" crlf) 
     (bind ?response (check-YNoptions-input)); Get user input on type of questions 
     (if (eq ?response y) 
      then 
      (assert (powerPlant1-question) 
      ) 
     ) 
     (if (eq ?response n) 
      then 
      (printout req "Please replace Filter and Carburetor Air " crlf) 
      (assert (powerPlant3-question)) 
    ) 
) 
) 

в правиле 2 я хочу вернуться к правилу 1, когда я вхожу «у» = да

"остановился после того, как я ввел" y ""

ответ

0

Если вы хотите повторить правило, соответствующее конкретному факту, отмените этот факт как часть действия правила. Если другое правило затем утверждает этот конкретный факт, правило будет перезапущено. Например:

(defrule choice-in-powerPlant2 
    ?f <- (powerPlant2-question) 
    => 
    (retract ?f) 
    (printout t "Are Filter and Carburetor Air working fine(y/n)?" crlf) 
     . 
     . 
     . 
) 
+0

Сейчас работа! thank u sooooooooooooooooo much^____^ thank u Gary^____________^ –

+0

Я просто хочу знать, может ли это работать на все defrule, только написать его один раз? или мне нужно написать этот код для каждого правила? –

+0

Вам нужно будет сделать это для каждого правила, которое вы хотите выполнить повторно. –