【发布时间】:2014-11-05 01:55:12
【问题描述】:
我在使用剪辑时遇到了问题。 我正在尝试为车辆做一个检测失败系统。 我有这个功能,可以让我用预定义的答案提出问题并将答案保存到变量中。 我的问题是,我输入了第一条规则,被问到第一个问题,但是,无论我做什么,都无法进入第二条规则(tipo-transmision),所以我可以继续这个序列,请帮助。
;;----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))
【问题讨论】: