У меня проблема с использованием клипов. Я пытаюсь сделать систему обнаружения-сбой для автомобиля. У меня есть эта функция, которая позволяет мне задавать вопрос с предопределенными ответами и сохранять ответ в переменной. Моя проблема в том, что я вхожу в первое правило, задаю первый вопрос, но, что бы я ни делал, не могу заставить его войти во второе правило (tipo-передача), чтобы я мог продолжить последовательность, help pls.Не удается ввести правило в клипе
;;----DEFFUNCTION----------
(deffunction pregunta (?pregunta $?respuestas-posibles)
(printout t ?pregunta)
(bind ?respuesta (read))
(if (lexemep ?respuesta)
then (bind ?respuesta (lowcase ?respuesta)))
(while (not (member ?respuesta ?respuestas-posibles)) do
(printout t ?pregunta)
(bind ?respuesta (read))
(if (lexemep ?respuesta)
then (bind ?respuesta (lowcase ?respuesta))))
?respuesta)
;; ----DEFTEMPLATE--------
(deftemplate carro
(slot falla (type SYMBOL)
(allowed-values electrica mecanica)
(default mecanica)
)
(slot transmision (type SYMBOL)
(allowed-values automatica manual)
(default automatica)
)
(multislot sintoma)
(multislot compostura)
)
;;----------DEFFACTS--------
(deffacts inicia
(carro))
;;---------DEFRULES---------
(defrule tipo-falla ""
?A <- (carro (compostura))
=>
(bind ?resp (pregunta "Tipo de Falla (electrica/mecanica)? " electrica mecanica)
)
(if (eq ?resp electrica)
then (modify ?A (falla electrica)
(transmision automatica)
(compostura)
(sintoma)
)
else (modify ?A (falla mecanica)
(transmision automatica)
(compostura)
(sintoma))
)
)
;;-------------------------------------------------------
(defrule tipo-transmision ""
?A <- (carro (transmision automatica) (compostura) (sintoma))
=>
(bind ?resp (pregunta
"Tipo de Transmision (automatica/manual)? " automatica manual)
)
(if (eq ?resp automatica)
then (modify ?A (transmision automatica)
(falla electrica)
(sintoma cortocircuito)
)
else (modify ?A (transmision manual)
)
)
)
;;--------------------------------------------------------
(defrule tipo-sintoma ""
?A <- (carro (falla electrica) (transmision automatica) (sintoma cortocircuito)(compostura))
=>
(bind ?resp (pregunta "Tipo de Sintoma (desajustesensor/cortocircuito/interruptorposicionralentia? " desajustesensor cortocircuito interruptorposicionralentia))
(modify ?A (sintoma ?resp))
)
;;----------------------------------
(defrule diagnostico1 ""
?A <- (carro (falla mecanica) (transmision automatica) (sintoma desajustesensor cortocircuito interruptorposicionralentia)(compostura))
=>
(modify ?A (falla mecanica)
(transmision automatica)
(sintoma desajustesensor cortocircuito interruptorposicionralentia)
(compostura "DAÑADO EL SENSOR DE LA MARIPOSA DE GASES")
)
)
;;---------------------------------
(defrule nada ""
(declare (salience -10))
?A <- (carro (compostura))
=>
(modify ?A (compostura "Llevalo al mecanico.")))
;;----------RESULTADOS--------------------
(defrule inicia
(declare (salience 1))
=>
(printout t crlf crlf)
(printout t "Sistema de Detección de Fallas de Un Vehiculo")
(printout t crlf crlf))
(defrule resultados
(declare (salience -1))
(carro (falla ?A) (transmision ?T) (sintoma ?S) (compostura ?C))
=>
(printout t "La falla es " ?A crlf)
(printout t "La transmision es " ?T crlf)
(printout t "El sintoma es " ?S crlf)
(printout t "Se sugiere de reparacion que:")
(printout t crlf crlf)
(format t " %s%n%n%n" ?C))