Este documento presenta un sistema experto para la detección de enfermedades virales. El sistema realiza preguntas al usuario sobre los síntomas presentados y, mediante reglas, deduce la posible enfermedad. Primero establece el estado inicial del paciente y luego realiza preguntas para ir descartando posibilidades hasta llegar a un diagnóstico.
Este documento presenta un sistema experto para la detección de enfermedades virales. El sistema realiza preguntas al usuario sobre los síntomas presentados y, mediante reglas, deduce la posible enfermedad. Primero establece el estado inicial del paciente y luego realiza preguntas para ir descartando posibilidades hasta llegar a un diagnóstico.
Este documento presenta un sistema experto para la detección de enfermedades virales. El sistema realiza preguntas al usuario sobre los síntomas presentados y, mediante reglas, deduce la posible enfermedad. Primero establece el estado inicial del paciente y luego realiza preguntas para ir descartando posibilidades hasta llegar a un diagnóstico.
;;;;;;Sistema Experto de deteccion de Enfermedades Virales
;;;;;; ;;;;;; Este es un sistema para la deteccion de enfermedades ;;;;;; que virales ;;;;;; ;;;;;; Para ejecutar, Cargar con la funcion load, reset y run. ;;;;;; ======================================================
(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-or-no-p (?pregunta)
(bind ?responde (preguntas ?pregunta si no s n)) (if (or (eq responde si ) (eq ?responde s)) then TRUE else FALSE))
;;*********** ;; Reglas**** ;;;**********
(defrule estado-normal ""
(declare (salience 10)) (estado vid normal) => (assert (enfermedad "No tiene ninguna enfermedad")))
(defrule sintoma-de-paciente ""
(not (estado vid ?)) (not (enfermedad ?)) => (if (si-or-no-p "Presenta fiebre y dolor de cabeza (si/no)?") then (if (si-or-no-p "Presenta erupciones cutaneas (si/no)? ") then (assert (estado vid erupciones)) else (assert (estado vid rubiola))) else (assert (estado vid picadura-insecto))))
(defrule chinkungunya ""
(estado vid erupciones) (not (enfermedad ?)) => (if (si-or-no-p "las erupciones les provocan picazon (si/no)?") then (assert (estado vid varicela)) else (assert (estado vid rubiola)) ))
(defrule varicela ""
(estado vid varicela) (not (enfermedad ?)) => (if (si-or-no-p "Las erupciones son peque�as y abultadas (si/no)?") then (assert (enfermedad " la enfermedad es VARICELA.")) else (assert (enfermedad "La enfermedad es VIRUELA.")) ))
(defrule rubiola ""
(estado vid rubiola) (not (enfermedad ?)) => (if (si-or-no-p "Las erupciones estan diceminadas en todo el cuerpo (si/no)?") then (assert (enfermedad " la enfermedad es RUBIOLA.")) else (assert (estado vid sarampion )) ))
(defrule sarampion ""
(estado vid sarampion) (not (enfermedad ?)) => (if (si-or-no-p "Los bultos en el cuerpo son de color rosado (si/no)?") then (assert (enfermedad " la enfermedad es SARAMPION.")) else (assert (estado vid alegia)) ))
(defrule alergia ""
(estado vid alergia) (not (enfermedad ?)) => (if (si-or-no-p "Las erupciones citaneas se presentan de pie a cabeza (si/no)?") then (assert (enfermedad " la enfermedad es solo una ALEGIA.")) else (assert (enfermedad "estado vid normal.")) ))
(defrule no-enfermedades ""
(declare(salience 10)) (not (enfermedad ?)) => (assert (enfermedad "La base de datos no detecto ninguna enfermedad"))) ;;**************************************************************** ;;* Diagnostico y deteccion de enfermedades virales ;;****************************************************************
(defrule system-banner ""
(declare (salience 10)) => (printout t crlf crlf) (printout t "SISTEMA EXPERTO DE ENFERMEDADES") (printout t crlf crlf))
(defrule imprimir-diagostico ""
(declare (salience 10)) (enfermedad ?dato) => (printout t crlf crlf) (printout t "El diagnostico es:") (printout t crlf crlf) (format t " %s%n%n%n" ?dato))