【问题标题】:Can't enter a rule in clips无法在剪辑中输入规则
【发布时间】: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))

【问题讨论】:

    标签: system clips


    【解决方案1】:

    您为 carro 事实分配值的策略尚不清楚。您将传输槽值默认为 automatica,将 falla 槽值默认为 mechanica。 Tipo-falla 和 Tipo-transmision 规则都为传输和 falla 槽分配值,所以即使 tipo-falla 规则本身没有循环,这两个规则交互也会有问题。

    如果您为插槽分配一个值,表明它们未指定,您可以在规则中使用此值来确定是否已分配值并防止重新触发规则。

    (deftemplate carro
        (slot falla 
           (type SYMBOL) 
           (allowed-values electrica mecanica nespecificat) 
           (default nespecificat))
        (slot transmision 
           (type SYMBOL) 
           (allowed-values automatica manual nespecificat) 
           (default nespecificat))
        (multislot sintoma)
        (multislot compostura))
    
    (defrule tipo-falla ""
       ?A <- (carro (falla nespecificat))
       =>
       (bind ?resp (pregunta "Tipo de Falla (electrica/mecanica)? " electrica mecanica))
       (modify ?A (falla ?resp)))
    

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 2012-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多