(clear) (reset) (mapclass Espera) (mapclass Funcionario) (mapclass Hotel) (mapclass ItemConsumo) (mapclass ListaEspera) (mapclass Periodo (mapclass Quarto) (mapclass Reserva) (deftemplate evento (slot qual)) (deftemplate sintomaAtivado (slot sintoma)) (deftemplate doencaAtivada (slot doenca)) (deftemplate examesAFazer (slot exame)) (deftemplate exameAtivado (slot exame)) (deftemplate sintomaDigitado (slot sintoma)) (deftemplate resultadoExame (slot exame) (slot resultado)) (defrule sintoma-inicial => (printout t "Digite 1 para inserir sintoma e 0 para finalizar" crlf) (bind ?i (read)) (while (= ?i 1) (printout t "Digite o que você está sentindo" crlf) (assert (sintomaDigitado (sintoma (read)))) (printout t "Digite 1 para inserir sintoma e 0 para finalizar" crlf) (bind ?i (read)) ) ) (defrule filtrar-sintomas (sintomaDigitado (sintoma ?sintoma)) (object (is-a Sintoma)(:NAME ?sintoma)) => (assert (sintomaAtivado (sintoma ?sintoma))) (printout t "O sintoma " ?sintoma " está em nossa base de dados" crlf) ) (defrule descobrir-doenca (object (is-a Doenca)(:NAME ?nomedadoenca)(OBJECT ?doenca)) (object (is-a Sintoma)(DOENCA_RELACIONADA $?a ?doenca $?b)(:NAME ?sintoma)) (sintomaAtivado (sintoma ?sintoma)) => (assert (doencaAtivada (doenca ?doenca))) (assert (evento (qual mostrarExames))) ) (defrule mostrarExames (evento (qual mostrarExames)) (object (is-a Doenca)(OBJECT ?objetoDoenca)(EXAME_RELACIONADO $?a ?exames $?b)) (object (is-a Exames)(:NAME ?nomeDoExame)(OBJECT ?exames)) (doencaAtivada (doenca ?objetoDoenca)) => (assert (examesAFazer (exame ?nomeDoExame))) (printout t "você terá que fazer o exame " ?nomeDoExame crlf) ) (defrule verificar-exames-positivos (examesAFazer (exame ?nomeDoExame)) => (printout t "O exame " ?nomeDoExame " deu positivo? (s/n)" crlf) (assert (resultadoExame (exame ?nomeDoExame) (resultado (read)))) ) (defrule ativar-exames-que-sao-positivos (resultadoExame (exame ?nomeDoExame) (resultado s)) => (assert (exameAtivado (exame ?nomeDoExame))) ) (defrule listar-doencas-do-cara (resultadoExame (exame ?nomeDoExame)(resultado s)) (object (is-a Doenca)(:NAME ?nome)(EXAME_RELACIONADO $?a ?exame $?b)(OBJECT ?objetoDoenca)) (object (is-a Exames)(:NAME ?nomeDoExame)(OBJECT ?exame)) (exameAtivado (exame ?nomeDoExame)) (doencaAtivada (doenca ?objetoDoenca)) => (printout t "você está com a doença " ?nome crlf) (assert (doencaAtivada (doenca ?nome))) ) (defrule mostrar-partes-do-corpo-relacionada-a-doenca (doencaAtivada (doenca ?nome)) (object (is-a Doenca)(:NAME ?nome)(PARTE_DO_CORPO_RELACIONADA $?a ?parte $?b)) (object (is-a PartedoCorpo)(:NAME ?nomeParte)(OBJECT ?parte)) => (printout t "A doença " ?nome " está relacionada à parte do corpo " ?nomeParte crlf) ) (defrule mostrar-tratamento-das-doencas-passadas-cirurgia (doencaAtivada (doenca ?nome)) (object (is-a Doenca)(:NAME ?nome)(TRATAMENTO_RELACIONADO $?a ?tratamento $?b)) (object (is-a Cirurgia)(:NAME ?nomeTratamento)(OBJECT ?tratamento)) => (printout t "Para a doença " ?nome " um dos tratamentos (cirurgia) é: " ?nomeTratamento crlf) ) (defrule mostrar-tratamento-das-doencas-passadas-clinico (doencaAtivada (doenca ?nome)) (object (is-a Doenca)(:NAME ?nome)(TRATAMENTO_RELACIONADO $?a ?tratamento $?b)) (object (is-a Clinico)(:NAME ?nomeTratamento)(OBJECT ?tratamento)) => (printout t "Para a doença " ?nome " um dos tratamento (clínico) é " ?nomeTratamento crlf) ) (run)