How to make sub-questions in CLIPS?

0

The title says it all. For my task I have to do a system with 100 questions so I decided to start with 10 and each one derive 10, for example

  • A-You have suffered an accident
  • B-He has Bleeding
  • C-Has severe vomiting

What happens I only show one at a time if I say no to A shows B and if I tell B if I should appear B.1 (what type of hemorrhage he has) but I give him and he jumps to B.1 and then C as I suspend the others?

Does anyone know T ^ T?

;;;==============================================================
;;;                Sistema Experto de Triaje
;;;
;;;                 CLIPS Version 6.3 Example
;;;==============================================================

;;*************************
;;*DEFINICION DE FUNCIONES*
;;*************************

(deffunction preguntas (?pregunta $?valor)
   (printout t ?pregunta)
   (bind ?respuesta (read))
   (if (lexemep ?respuesta) 
       then (bind ?respuesta (lowcase ?respuesta)))
   (while (not (member ?respuesta ?valor)) do
      (printout t ?pregunta)
      (bind ?respuesta (read))
      (if (lexemep ?respuesta) 
          then (bind ?respuesta (lowcase ?respuesta))))
   ?respuesta)

deffunction si-o-no-p (?pregunta)
   (bind ?responde (preguntas ?pregunta si no s n))
   (if (or (eq ?responde si) (eq ?responde s))
       then si 
       else no))


;;;********************
;;;*REGLAS DE CONSULTA*
;;;********************

(defrule determina-emergencia ""
    (not (usuario-emergencia ?))
    (not (color ?))
    =>
    (assert (usuario-emergencia (si-o-no-p "¿Posee el paciente emergencia alguna? (Si/No)"))))

(defrule determina-signos ""
    (usuario-emergencia si)
    (not (usuario-vivo ?))
    (not (color ?))
    =>
    (assert (usuario-vivo (si-o-no-p "¿Posee el paciente signos vitales? (Si/No)"))))

(defrule determina-sangre ""
    (usuario-vivo si)
    (not (color ?))
    =>
    (assert (usuario-sangre (si-o-no-p "¿Tiene el paciente insiciones o hemorragias? (Si/No)"))))

(defrule determina-combulsion ""
    (usuario-vivo si)
    (usuario-sangre no)
    (not (color ?))
    =>
    (assert (usuario-combulsion (si-o-no-p "¿Tiene el paciente estado de combulsion alguno? (Si/No)"))))


(defrule determina-conciencia ""
    (usuario-vivo si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (not (color ?))
    =>
    (assert (usuario-conciente (si-o-no-p "¿Esta el paciente en estado conciente?  (Si/No)"))))

(defrule determina-quemadura ""
    (usuario-vivo si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (not (color ?))
    =>
    (assert (usuario-quemadura (si-o-no-p "¿Tiene el paciente quemaduras? (Si/No)"))))


(defrule determina-dolor ""
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (not (color ?))
    =>
    (assert (usuario-dolor (si-o-no-p "¿Posee el paciente dolor alguno? (Si/No)"))))

(defrule determina-toxico ""
    (usuario-vivo si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor no)
    (not (color ?))
    =>
    (assert (usuario-toxico (si-o-no-p "¿Ha ingerido el paciente alguna sustancia toxica? (Si/No)"))))

(defrule determina-vomito ""
    (usuario-vivo si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor no)
    (usuario-toxico no)
    (not (color ?))
    =>
    (assert (usuario-vomito (si-o-no-p "¿Posee el paciente vomitos severos y persistentes? (Si/No)"))))

(defrule determina-respiracion ""
    (usuario-vivo si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor no)
    (usuario-toxico no)
    (usuario-vomito no)
    (not (color ?))
    =>
    (assert (usuario-respiracion (si-o-no-p "¿Tiene el paciente dificultad al respirar en estado de reposo?(Si/No)"))))

(defrule determina-enfermedad ""
    (usuario-vivo si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor no)
    (usuario-toxico no)
    (usuario-vomito no)
    (usuario-respiracion no)
    (not (color ?))
    =>
    (assert (usuario-enfermedad (si-o-no-p "¿Considera que el paciente esta enfermo? (Si/No)"))))

;;============
;;=Emorragias=
;;============

(defrule determina-tipo-sangre ""

    (usuario-sangre si)
    (not (color ?))
    =>
    (assert (usuario-tipo-sangre (preguntas "¿Puede definir el tipo de hemorragia? Externa(Heridas)/Exteriorizada(sangre que sale por los orificios del cuerpo)" externa exteriorizada))))

(defrule determina-zona-sangre ""

    (usuario-sangre si)
    (usuario-sangre-tipo exteriorizada)
    (not (color ?))
    =>
    (assert (usuario-zona-sangre (preguntas "¿Puede expecificar por donde emerge la hemorragia? Boca/Nariz/Recto/Vagina/uretra/Oido/Ojo" boca nariz recto vagina uretra oido ojo))))

(defrule determina-boca-sangre ""

    (usuario-sangre si)
    (usuario-sangre-tipo exteriorizada)
    (usuario-zona-sangre boca)
    (not (color ?))
    =>
    (assert (usuario-boca-sangre (preguntas "¿De que manera expulsa sangre por la boca? Tosiendo/Vomitando" tosiendo vomitando))))


(defrule determina-sangre-externa ""

    (usuario-sangre si)
    (usuario-sangre-tipo externa)
    (not (color ?))
    =>
    (assert (usuario-sangre-externa (preguntas "¿De que manera se ha producido la herida? Vehicular/Caida/Agresion" vehicular caida agresion))))

;;============
;;=Combulsion=
;;============

(defrule determina-tiempo-combulsion ""
    (usuario-vivo si)
    (usuario-combulsion si)
    (not (color ?))
    =>
    (assert (usuario-tiempo-combulsion (preguntas "¿Hace cuanto fue la ultima combulsion? Recientemente/1h/4h/8h/Ayer" recientemente 1h 4h 8h ayer))))

;;============
;;=Quemaduras=
;;============

(defrule determina-tipo-quemadura ""
    (usuario-vivo si)
    (usuario-quemadura si)
    (not (color ?))
    =>
    (assert (usuario-tipo-quemadura (preguntas "¿Puede definir el grado de la quemadura? Primera/Segunda/Tercera" primera segundo tercera))))

;;=======
;;=Dolor=
;;=======

(defrule determina-tipo-dolor ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (not (color ?))
    =>
    (assert (usuario-tipo-dolor (preguntas "¿Que tipo de dolor padece? Muscular/Oseo/Cefalico/Visceral" muscular oseo cefalico visceral))))

;;========
;;=DolorM=
;;========

(defrule determina-sintoma-dolor-m ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor muscular)
    (not (color ?))
    =>
    (assert (usuario-sintoma-M (preguntas "¿Posee sintomas como Hinchazon/Enrojecimiento/Erupcion/Entumecimiento?" hinchazon enrojecimiento erupcion entumecimiento))))

(defrule determina-esguince ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor muscular)
    (usuario-sintoma enrojecimiento)
    (usuario-sintoma entumecimiento)
    (not (color ?))
    =>
    (assert (usuario-esguince (si-o-no-p "¿Considera usted que posee un esguince ?(Si/No)"))))

;;========
;;=DolorO=
;;========

(defrule determina-cancer ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor oseo)
    (not (color ?))
    =>
    (assert (usuario-cancer (si-o-no-p "¿Tiene usted cancer en los huesos o posee antecedentes familiares?(Si/No)"))))

(defrule determina-columna ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor oseo)
    (not (color ?))
    =>
    (assert (usuario-columna (si-o-no-p "¿Su dolor radica en la columna?(Si/No)"))))


(defrule determina-sintoma-dolor-o ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor oseo)
    (usuario-cancer no)
    (usuario-columna si)
    (usuario-columna no)
    (not (color ?))
    =>
    (assert (usuario-sintoma-o (preguntas "¿cual considera que es su caso Fractura/Gangrena(falta de sangre)/Infeccion/Dislocacion?" fractura gangrena infeccion dislocacion))))

(defrule determina-zona-fractura ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor oseo)
    (usuario-cancer no)
    (usuario-columna no)

    (not (color ?))
    =>
    (assert (usuario-zona-fractura (preguntas "¿En que region se encuentra la fractura? Brazos/Piernas/Torso/Espalda/Cabeza" brazos piernas torso espalda cabeza ))))

(defrule determina-fractura ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor oseo)
    (usuario-sintoma-o fractura)
    (usuario-zona-fractura brazo)
    (usuario-zona-fractura piernas)
    (not (color ?))
    =>
    (assert (usuario-fractura (si-o-no-p "¿El hueso emerge del cuerpo?(Si/No)"))))

;;==========
;;=Visceral=
;;==========

(defrule determina-sintoma-dolor-v ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor visceral)
    (not (color ?))
    =>
    (assert (usuario-sintoma-dolor-v (preguntas "¿En que region posee el dolor Toracica/Abdominal/Genital?" Toracica Abdominal Genital))))

(defrule determina-dolor-abdomen ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor visceral)
    (usuario-sintoma-dolor-v abdominal)
    (not (color ?))
    =>
    (assert (usuario-abdomen (preguntas "¿En que region se intencifica el dolor Superior/Inferior/Derecha/Izquierda?" superior inferior derecha izquierda ))))

(defrule determina-organo ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor visceral)
    (usuario-sintoma-dolor-v toracica)
    (not (color ?))
    =>
    (assert (usuario-organo (preguntas "¿Considera que su dolor se relaciona con los pulmones o con el corazon?"  corazon pulmones ))))

(defrule determina-dificultad ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor visceral)
    (usuario-sintoma-o fractura)
    (usuario-sintoma-dolor-v toracica)
    (not (color ?))
    =>
    (assert (usuario-dificultad (si-o-no-p "¿Tiene dificultad al respirar?(Si/No)"))))

(defrule determina-caida ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor visceral)
    (usuario-sintoma-o fractura)
    (usuario-sintoma-dolor-v toracica)
    (usuario-respiracion si)
    (usuario-respiracion no)
    (not (color ?))
    =>
    (assert (usuario-caida (si-o-no-p "¿Ha sufrido caidas o recibido golpes recientes?(Si/No)"))))
;;;=========
;;;=Genital=
;;;=========

(defrule determina-genital ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor genital)
    (not (color ?))
    =>
    (assert (usuario-genital (si-o-no-p "¿Considera usted que se trata de una infeccion presenta irritacion erupcion o sintomas similares?(Si/No)"))))


(defrule determina-orina ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor genital)

    (not (color ?))
    =>
    (assert (usuario-orina (si-o-no-p "¿Ha orinado sangre?(Si/No)"))))


(defrule determina-gestacion ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor genital)
    (not (color ?))
    =>
    (assert (usuario-gestacion (si-o-no-p "¿Se encuentra usted en estado de gestacion (Embarazo)?(Si/No)"))))

;;==========
;;=Cefalico=
;;==========

(defrule determina-sintoma-dolor-c ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor cefalico)
    (not (color ?))
    =>
    (assert (usuario-region-dolor-c (preguntas "¿En que region se intencifica el dolor Frente/Cuello/Nariz/Cerebro?" frente cuello nariz cerebro))))

(defrule determina-mucosa ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor cefalico)
    (usuario-region-dolor-c frente)
    (usuario-region-dolor-c nariz)
    (not (color ?))
    =>
    (assert (usuario-mucosa (si-o-no-p "¿Posee dificultad para respirar u ojos rojizos o llorosos?(Si/No)"))))

(defrule determina-migraña ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor cefalico)
    (usuario-region-dolor-c cerebro)

    (not (color ?))
    =>
    (assert (usuario-migraña (si-o-no-p "¿Considera usted que el dolor interfiere con sus actividades diarias ?(Si/No)"))))

(defrule determina-vision ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor cefalico)
    (usuario-region-dolor-c cerebro)
    (usuario-migraña si)
    (not (color ?))
    =>
    (assert (usuario-vision(si-o-no-p "¿Presenta sintomas como perdida de vision problemas al habla o mala articulacion?(Si/No)"))))

(defrule determina-cuello-debil ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor cefalico)
    (usuario-region-dolor-c cuello)
    (not (color ?))
    =>
    (assert (usuario-cuello-debil (si-o-no-p "¿Siente debilidad en los brazos u hombros ?(Si/No)"))))

(defrule determina-rotacion ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor cefalico)
    (usuario-region-dolor-c cuello)
    (usuario-cuello-debil no)
    (not (color ?))
    =>
    (assert (usuario-rotacion (si-o-no-p "¿Puede rotar el cuello con facilidad?(Si/No)"))))

(defrule determina-cuello ""
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-dolor si)
    (usuario-tipo-dolor cefalico)
    (usuario-region-dolor-c cuello)
    (usuario-cuello-debil no)
    (usuario-rotacion no)
    (not (color ?))
    =>
    (assert (usuario-cuello (si-o-no-p "¿Esta su dolor asociado con la garganta?(Si/No)"))))


(defrule determina-cuello-sintoma ""
    (usuario-cuello si)
    (usuario-vivo si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (not (color ?))
    =>
    (assert (usuario-cuello-sintoma (si-o-no-p "¿Presenta sintomas como falta del habla o dificultad al tragar?(Si/No)"))))

(defrule determina-cuello-columna ""
    (usuario-cuello-debil si)
    (usuario-conciencia si)
    (usuario-sangre no)
    (usuario-combulsion no)
    (usuario-conciente si)
    (usuario-quemadura no)
    (usuario-rotacion si)
    (not (color ?))
    =>
    (assert (usuario-cuello-columna (si-o-no-p "¿Relaciona usted el dolor con la columna?(Si/No)"))))

;;=========
;;=Toxicos=
;;=========

(defrule determina-tipo-toxico ""
    (usuario-toxico si)
    (not (color ?))
    =>
    (assert (usuario-tipo-toxico (si-o-no-p "¿Ha ingerido elementos como Gasolina Cloro o Detergentes?(Si/No)"))))

(defrule determina-toxico-daños ""
    (usuario-toxico si)
    (usuario-tipo-toxico no)
    (not (color ?))
    =>
    (assert (usuario-daños (si-o-no-p "¿Presenta perdida de vision/Dolor de garganta/Ardor en los ojos, nariz o labios?(Si/No)"))))

(defrule determina-sangre-heces ""
    (usuario-toxico si)
    (usuario-daños no)
    (not (color ?))
    =>
    (assert (usuario-haces (si-o-no-p "¿Presenta sangre en las heces?(Si/No)"))))

(defrule determina-toxico-vomitos ""
    (usuario-toxico si)
    (usuario-daños no)
    (usuario-haces no)
    (not (color ?))
    =>
    (assert (usuario-vomitos (si-o-no-p "¿Ha presentado vomitos?(Si/No)"))))

(defrule determina-toxico-inflamacion ""
    (usuario-toxico si)
    (usuario-daños no)
    (usuario-haces no)
    (usuario-vomitos no)
    (not (color ?))
    =>
    (assert (usuario-inflamacion (si-o-no-p "¿Posee dificultad respiratoria o inflamacion en la garganta?(Si/No)"))))

(defrule determina-huecos ""
    (usuario-toxico si)
    (usuario-daños no)
    (usuario-haces no)
    (usuario-vomitos no)
    (usuario-inflamacion)
    (not (color ?))
    =>
    (assert (usuario-huecos (si-o-no-p "¿Presenta irritacion u orificion en al piel?(Si/No)"))))

;;======
;;=Azul=
;;======

(defrule determina-actividad ""
    (usuario-emergencia no)
    (not (color ?))
    =>
    (assert (usuario-actividad (si-o-no-p "¿Viene a entregar documentos como resultados u otros? (Si/No)"))))



;;;**************
;;;*DIAGNOSTICOS*
;;;**************

(defrule estado-vivo ""
   (usuario-emergencia si)
   (usuario-vivo no)
   (not (color ?))
   =>
   (assert (color "Codigo Rojo")))


(defrule estado-inutil ""
   (usuario-emergencia no)
   (usuario-actividad no)
   (not (color ?))
   =>
   (assert (color "Por favor no moleste")))

(defrule no-color ""
  (declare (salience -20))
  (not (color ?))
  =>
  (assert (color "Lo lamento no estoy capacitado para ayudarlo")))


;;;************************
;;;*REGLAS DE CONCLUCIONES*
;;;************************

(defrule system-banner ""
  (declare (salience 20))
  =>
  (printout t crlf crlf)
  (printout t "Sistema Experto de Triaje")
  (printout t crlf crlf))

(defrule print-color ""
  (declare (salience 20))
  (color ?item)
  =>
  (printout t crlf crlf)
  (printout t "Su color es:")
  (printout t crlf crlf)
  (format t " %s%n%n%n" ?item))

    
asked by Victor Delgado 01.01.2017 в 16:17
source

0 answers