Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Integrantes: Arana Lpez,Liz Yguabil Quispe,Renso Tarazona Chicmana,Manuel Zarate Aliaga, Manuel 07200056 01115087 07200117 03200134
CONTENIDO GENERAL
I. CAPTULO 1
Fundamento Terico Desarrollo del Sistema Experto Explicacin Detallada del Problema Cdigo fuente Corrida paso a paso del cdigo
II. CAPTULO 2
Fundamento Terico Desarrollo del Sistema Experto Mdico y de Platillos Explicacin Detallada del Problema Cdigo fuente Corrida paso a paso del cdigo
CONTENIDO
I. PARTE TERICA
1.1 Introduccin Qu es un sistema basado en el conocimiento? Historia de los Lenguajes Basados en Conocimiento Lenguajes y generadores de sistemas basados en el conocimiento
I. PARTE TERICA
1.1 Introduccin
QU ES UN SISTEMA BASADO EN EL CONOCIMIENTO?
Los sistemas basados en el conocimiento son el resultado de un largo proceso de investigacin realizado por los cientficos en el rea de la Inteligencia Artificial, cuando, en los aos setenta, comenzaron a comprender que la capacidad de un programa de ordenador para resolver problemas no reside en la expresin formal ni en los esquemas lgicos de inferencia que emplea sino en el conocimiento que posee. Un experto es alguien que posee unos determinados conocimientos y experiencia en un campo de la actividad humana y es capaz de aplicarlos con rapidez y eficiencia en la resolucin de tareas diferentes aunque no le hayan sido encomendadas con anterioridad, pero que caen dentro de su dominio. As, un sistema basado en el conocimiento es un cuerpo de programas de ordenador que intenta imitar e incluso superar en algunas situaciones a un experto humano en un mbito concreto de su actividad. No pretende, en absoluto, reproducir el pensamiento humano, sino simplemente la pericia de un profesional competente (tngase en cuenta que para construir un SBC se suele contar con grandes expertos en la materia que incorporan su conocimiento al sistema). Esta pretensin es ms sencilla ya que en algunos campos reducidos los expertos trabajan siguiendo reglas, aunque, generalmente, no sean conscientes de ello. En aquellos campos en los que no sea necesario aplicar la intuicin ni el sentido comn, los sistemas basados en el conocimiento han conseguido notables xitos, consiguiendo en ocasiones ser ms regulares y rpidos que los propios expertos.
LENGUAJES BASADOS EN CONOCIMIENTO Para el desarrollo de sistemas basados en el conocimiento se han venido utilizando tanto lenguajes de programacin especficos de la inteligencia artificial (LISP y PROLOG) como de propsito general (C, PASCAL, etc.). El lenguaje LISP es uno de los ms utilizados desde los comienzos de la I.A.
1.2 Prolog
QU ES PROLOG?
Prolog , del Frances :Programation en Logique. Es el lenguaje declarativo, quien a partir de los datos introducidos deduce nuevos hechos y resuelve el problema automticamente. PROLOG tiene incluido, por tanto, un motor de inferencia que se encarga de realizar bsquedas en su base de hechos.
HISTORIA
Se trata de un lenguaje de programacin ideado a principios de los aos 70 en la universidad de Aix-Marseille por los profesores Alain Colmerauer y Phillipe Roussel. Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, a mediados de los 70, David H.D. Warren desarroll un compilador capaz de traducir Prolog en un conjunto de instrucciones de una mquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado. Prolog se enmarca en el paradigma de los lenguajes lgicos, lo que lo diferencia enormemente de otros lenguajes ms populares tales como Fortran, Pascal, C, Java.
PROGRAMACIN EN PROLOG
Los programas en Prolog se componen de clusulas de Horn que constituyen reglas del tipo "modus ponendo ponens", es decir, "Si es verdad el antecedente, entonces es verdad el consecuente". No obstante, la forma de escribir las clusulas de Horn es al contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente. El antecedente puede ser una conjuncin de condiciones que se denomina secuencia de objetivos. Cada objetivo se separa con una coma y puede considerarse similar a una instruccin o llamada a procedimiento de los lenguajes imperativos. En Prolog no existen instrucciones de control. Su ejecucin se basa en dos conceptos: la unificacin y el backtracking. Gracias a la unificacin, cada objetivo determina un subconjunto de clusulas susceptibles de ser ejecutadas. Cada una de ellas se denomina punto de eleccin. Prolog selecciona el primer punto de eleccin y sigue ejecutando el programa hasta determinar si el objetivo es verdadero o falso. En caso de ser falso entra en juego el backtracking, que consiste en deshacer todo lo ejecutado situando el programa en el mismo estado en el que estaba justo antes de llegar al punto de eleccin. Entonces se toma el siguiente punto de eleccin que estaba pendiente y se repite de nuevo el proceso. Todos los objetivos terminan su ejecucin bien en xito ("verdadero"), bien en fracaso ("falso").
%%platos que hay plato(rocoto_relleno). plato(picante_de_caracol). plato(ensalada_pan_arbol). plato(ensalada_de_quinua). plato(garabamba). plato(cebiche_serrano). plato(picante_de_cuy). plato(mazamorra_de_tocosh). plato(mazamorra_de_kiwicha). plato(patarashka). plato(locro_de_zapallo). plato(ajiaco_de_olluco). plato(caigua_rellena).
%%plato por departamentos %pertenece_a(plato,departamento) pertenece_a(rocoto_relleno,arequipa). pertenece_a(picante_de_caracol,ucayali). pertenece_a(ensalada_pan_arbol,ucayali). pertenece_a(ensalada_de_quinua,junin). pertenece_a(garabamba,cuzco). pertenece_a(mazamorra_de_kiwicha,cuzco). pertenece_a(patarashka,sanMartin). pertenece_a(cebiche_serrano,ancash). pertenece_a(picante_de_cuy,ancash). pertenece_a(mazamorra_de_tocosh,ancash).
%%%ingredientes que hay ingrediente(aceite). ingrediente(arroz). ingrediente(pollo). ingrediente(arverja). ingrediente(zanahoria). ingrediente(culandro). ingrediente(sal). ingrediente(fideo). ingrediente(tomate). ingrediente(carne). ingrediente(pescado). ingrediente(ajos). ingrediente(cebolla). ingrediente(limon). ingrediente(rocoto). ingrediente(papa). ingrediente(queso). ingrediente(perejil). ingrediente(caracol). ingrediente(aji_panca). ingrediente(aceite_oliva). ingrediente(pan_arbol). ingrediente(oregano). ingrediente(lechuga). ingrediente(quinua). ingrediente(pimenton). ingrediente(apio). ingrediente(trigo). ingrediente(mote). ingrediente(habas). ingrediente(patita_de_chancho). ingrediente(tarwi). ingrediente(maiz). ingrediente(cuy). ingrediente(mani).
ingrediente(tocosh). ingrediente(canela). ingrediente(aji). ingrediente(kiwicha). ingrediente(guindones). ingrediente(pasas). ingrediente(azucar). ingrediente(naranja). ingrediente(coco). ingrediente(pescado).
%%%contenido de cada plato %contiene(plato,ingrediente) %1%Rocoto Relleno% contiene(rocoto_relleno,carne). contiene(rocoto_relleno,rocoto). contiene(rocoto_relleno,papa). contiene(rocoto_relleno,queso). contiene(rocoto_relleno,perejil). contiene(rocoto_relleno,sal). %2%Picante de Caracol% contiene(picante_de_caracol,caracol). contiene(picante_de_caracol,aji_panca). contiene(picante_de_caracol,ajos). contiene(picante_de_caracol,cebolla). contiene(picante_de_caracol,tomate). contiene(picante_de_caracol,aceite_oliva). contiene(picante_de_caracol,culandro). contiene(picante_de_caracol,sal).
%4%Ensalada de Quinua% contiene(ensalada_de_quinua,quinua). contiene(ensalada_de_quinua,cebolla). contiene(ensalada_de_quinua,ajos). contiene(ensalada_de_quinua,pimenton). contiene(ensalada_de_quinua,apio). contiene(ensalada_de_quinua,tomate). contiene(ensalada_de_quinua,culandro). contiene(ensalada_de_quinua,limon). %5%Garabamba% contiene(garabamba,trigo). contiene(garabamba,arverja). contiene(garabamba,mote). contiene(garabamba,habas). contiene(garabamba,patita_de_chancho).
contiene(garabamba,perejil). %6%Cebiche Serrano% contiene(cebiche_serrano,tarwi). contiene(cebiche_serrano,maiz). contiene(cebiche_serrano,cebolla). contiene(cebiche_serrano,perejil). contiene(cebiche_serrano,limon). contiene(cebiche_serrano,tomate). contiene(cebiche_serrano,ajos). %7%Picante de Cuy% contiene(picante_de_cuy,cuy). contiene(picante_de_cuy,ajos). contiene(picante_de_cuy,mani). contiene(picante_de_cuy,papa). contiene(picante_de_cuy,aji).
%10%Mazamora de Kiwicha% contiene(mazamorra_de_kiwicha,kiwicha). contiene(mazamorra_de_kiwicha,guindones). contiene(mazamorra_de_kiwicha,pasas). contiene(mazamorra_de_kiwicha,azucar). contiene(mazamorra_de_kiwicha,naranja). contiene(mazamorra_de_kiwicha,coco). %11%Locro de Zapallo contiene(locro_de_zapallo,zapallo). contiene(locro_de_zapallo,queso). contiene(locro_de_zapallo,papa). contiene(locro_de_zapallo,choclo). contiene(locro_de_zapallo,cebolla). contiene(locro_de_zapallo,leche). %12%Ajiaco de olluco contiene(ajiaco_de_olluco,olluco). contiene(ajiaco_de_olluco,tomate). contiene(ajiaco_de_olluco,cebolla). contiene(ajiaco_de_olluco,ajos). contiene(ajiaco_de_olluco,queso). contiene(ajiaco_de_olluco,aceite). %13%Caiguas Rellenas contiene(caiguas_rellenas,caigua).
contiene(caiguas_rellenas,cebolla). contiene(caiguas_rellenas,tomate). contiene(caiguas_rellenas,carne). contiene(caiguas_rellenas,pasas). contiene(caiguas_rellenas,aceituna). %14%Sancochado contiene(sancochado,carne). contiene(sancochado,papa). contiene(sancochado,yuca). contiene(sancochado,arroz). contiene(sancochado,zanahoria). contiene(sancochado,col). contiene(sancochado,apio). contiene(sancochado,nabo). %15%Parihuela contiene(parihuela,ajos). contiene(parihuela,cebolla). contiene(parihuela,vino). contiene(parihuela,choros). contiene(parihuela,camarones). contiene(parihuela,langostinos). contiene(parihuela,aji). contiene(parihuela,pescado). %16%Sopa Seca contiene(sopa_seca,cebolla). contiene(sopa_seca,ajos). contiene(sopa_seca,albahaca). contiene(sopa_seca,tomate). contiene(sopa_seca,zanahoria). contiene(sopa_seca,pollo). contiene(sopa_seca,huevo). contiene(sopa_seca,sal). %17%Dulce de higo contiene(dulce_de_higo,higo). contiene(dulce_de_higo,azucar). contiene(dulce_de_higo,miel). %18%Agua de Manzana contiene(agua_de_manzana,manzana). contiene(agua_de_manzana,azucar). contiene(agua_de_manzana,canela). %19%Coctel de Algarrobina contiene(coctel_de_algarrobina,pisco). contiene(coctel_de_algarrobina,algarrobina). contiene(coctel_de_algarrobina,huevo). contiene(coctel_de_algarrobina,azucar). contiene(coctel_de_algarrobina,canela). %20%Cau-Cau contiene(cau_cau,mondongo). contiene(cau_cau,papa). contiene(cau_cau,cebolla). contiene(cau_cau,ajos). contiene(cau_cau,aceite). contiene(cau_cau,arverja).
%%%enfermedades que hay enfermedad(colesterol). enfermedad(vista). enfermedad(osteoporosis). enfermedad(hepatitis). enfermedad(insuficiencia_renal). enfermedad(artritis). enfermedad(colon_irritable). enfermedad(gastritis). enfermedad(estreimiento). enfermedad(hipertension).
%ingrediente que producen una enfermedad producido_por(colesterol,queso). producido_por(colesterol,carne). producido_por(osteoporosis,sal). producido_por(hepatitis,queso). producido_por(hepatitis,carne). producido_por(insuficiencia_renal,sal). producido_por(artritis,limon). producido_por(artritis,tomate). producido_por(colon_irritable,aji_panca). producido_por(colon_irritable,rocoto). producido_por(colon_irritable,aji). producido_por(gastritis,aji). producido_por(gastritis,aji_panca). producido_por(gastritis,rocoto). producido_por(gastritis,limon). producido_por(gastritis,habas). producido_por(gastritis,naranja).
%ingrediente que previenen una enfermedad prevenido_por(vista,zanahoria). prevenido_por(vista,tomate). prevenido_por(anemia,pollo). prevenido_por(anemia,carne). prevenido_por(anemia,pescado). prevenido_por(anemia,ajos). prevenido_por(gripe,ajos). prevenido_por(gripe,cebolla). prevenido_por(gripe,limon). prevenido_por(osteoporosis,queso). prevenido_por(osteoporosis,perejil). prevenido_por(osteoporosis,culandro). prevenido_por(osteoporosis,quinua). prevenido_por(hepatitis,cebolla). prevenido_por(hepatitis,aceite_oliva).
prevenido_por(insuficiencia_renal,quinua). prevenido_por(insuficiencia_renal,trigo). prevenido_por(insuficiencia_renal,papa). prevenido_por(insuficiencia_renal,queso). prevenido_por(artritis,trigo). prevenido_por(artritis,arverja). prevenido_por(artritis,perejil). prevenido_por(artritis,tarwi). prevenido_por(artritis,pan_arbol). prevenido_por(artritis,culandro). prevenido_por(colon_irritable,cuy). prevenido_por(colon_irritable,tarwi). prevenido_por(colesterol,tarwi). prevenido_por(colesterol,cebolla). prevenido_por(colesterol,ajos). prevenido_por(colesterol,quinua). prevenido_por(colesterol,aceite_oliva). prevenido_por(colesterol,cuy). prevenido_por(colesterol,mani). prevenido_por(gastritis,tocosh). prevenido_por(gastritis,canela). prevenido_por(estreimiento,limon). prevenido_por(estreimiento,naranja). prevenido_por(estreimiento,guindones). prevenido_por(estreimiento,pasas). prevenido_por(estreimiento,coco). %agremamos lo que previene a neumonia prevenido_por(neumonia,limon). prevenido_por(neumonia,apio). %%%especialidades medicas especialidad(hepatologo). especialidad(traumatologo). especialidad(nefrologo). especialidad(reumatologo). especialidad(endocrinologo). especialidad(coloproctologo). especialidad(gastroenterologo). %agregamos la especialidad para prevenir la neumonia especialidad(neumologo). %especialista que atiende la enfermedad atiende(gastroenterologo,gastritis). atiende(coloproctologo,estreimiento). atiende(coloproctologo,colon_irritable). atiende(reumatologo,artritis). atiende(nefrologo,insuficiencia_renal). atiende(traumatologo,artritis). atiende(reumatologo,osteoporosis). atiende(hepatologo,hepatitis). %agregamos especialista que trata la enfermedad atiende(neumologo,neumonia).
%pacientes que tenemos con su enfermedad que tienen tiene(renso,gastritis). tiene(tomas,osteoporosis). tiene(tomas,estreimiento). tiene(melissa,artritis). tiene(juan,colon_irritable). tiene(yeny,hepatitis). tiene(jose,insuficiencia_renal). %agregamos la enfermedad que tiene periquita tiene(periquita,neumonia).
% ************************************************************************* % %%%%%%%%----------------------REGLAS----------------------%%%%%%%%%%%%%%% % ************************************************************************* % % /************************************************************************************/ %Preg1%que plato debe comer?-ok %plato debe comer(persona,lista sin repetidos) plato_debe_comer(Per,L):- platos_deberia_comer(Per,Lpla),elim_repet(Lpla,L). %devuelve la lista repetida de platos que puede comer %platos_deberia_comer(persona,lista con repeticion) platos_deberia_comer(Per,L):findall(Pla,(plato_puede_comer(Per,Pla),tiene(Per,Enf),contiene(Pla,Ing),prevenido_por(Enf,Ing)),L). /************************************************************************************/
%Preg2%que plato puede comer-ok %platos_puede_comer(persona,lista de platos) comida_puede_comer(Per,L):- findall(Pla,plato_puede_comer(Per,Pla),L). %plato_puede_comer(persona,plato que puede comer) plato_puede_comer(Per,Pla):- lista_enfer(Per,Lenf),plato(Pla),enfer_plato(Lenf,Pla). %recorre y verifica cada enfermedad de la persona con el plato %enfer_plato(lista de enfermedades,plato) enfer_plato([],_):-!. enfer_plato([Enf|Lenf],Pla):- veri_ingre_plato(Enf,Pla),enfer_plato(Lenf,Pla). % obtengo la lista ingredientes del plato y con la enfermedad % veri_ingre_plato(enfermedad,plato) veri_ingre_plato(Enf,Pla):- lista_ingre(Pla,Ling),enfer_ingre(Enf,Ling). %recorre y verifica cada ingrediente con la enfermedad %enfer_ingre(enfermedad,lista de ingredientes) enfer_ingre(_,[]):-!. enfer_ingre(Enf,[Ing|Ling]):-not(producido_por(Enf,Ing)),enfer_ingre(Enf,Ling). /************************************************************************************/
%Preg4%Qu ingredientes puede comer-ok %ingredientes_puede_comer(persona,lista de ingredientes) ingredientes_puede_comer(Per,Ling):- findall(Ing,ingre_puede_comer(Per,Ing),Ling). %ingre_puede_comer(persona,ingrediente que puede comer) ingre_puede_comer(Per,Ing):- lista_enfer(Per,Lenf),ingrediente(Ing),ingre_enfer(Ing,Lenf). %recorre y verifica los ingredientes con cada enfermedad %ingre_enfer(ingrediente,lista de enfermedades) ingre_enfer(_,[]):-!. ingre_enfer(Ing,[Enf|Lenf]):- not(producido_por(Enf,Ing)),ingre_enfer(Ing,Lenf). /************************************************************************************/
%%Preg5%Que ingredientes no puede comer-ok %ingredientes_no_puede_comer(persona,lista de ingredientes q no come) ingredientes_no_puede_comer(Per,Ling):-findall(Ing,no_puede_comer(Per,Ing),Ling). %no_puede_comer(persona,ingrediente) no_puede_comer(Per,Ing):- tiene(Per,Enf),ingrediente(Ing),producido_por(Enf,Ing). /************************************************************************************/
%Preg6%Que comidas debe recetar el especialista-ok %comidas_debe_recetar(especialista,lista de platos sin repetir) comidas_debe_recetar(Esp,L):-comidas_deberia_recetar(Esp,Lpla),elim_repet(Lpla,L). %comidas_deberia_recetar(especialista,lista de platos repetidos) comidas_deberia_recetar(Esp,Lpla):- findall(Pla,comida_debe_recetar(Esp,Pla),Lpla). %comida_debe_recetar(especialista,plato). comida_debe_recetar(Esp,Pla) :- atiende(Esp,Enf),prevenido_por(Enf,Ing),contiene(Pla,Ing). /************************************************************************************/
%Preg7%Que comidas no debe recetar el especialista-ok %comidas_debe_recetar(especialista,lista de platos sin repetir) comidas_no_debe_recetar(Esp,L):-comidas_no_deberia_recetar(Esp,Lpla),elim_repet(Lpla,L). %comidas_deberia_recetar(especialista,lista de platos repetidos) comidas_no_deberia_recetar(Esp,Lpla):- findall(Pla,comida_no_debe_recetar(Esp,Pla),Lpla). %comida_debe_recetar(especialista,plato). comida_no_debe_recetar(Esp,Pla) :- atiende(Esp,Enf),producido_por(Enf,Ing),contiene(Pla,Ing).
/************************************************************************************/
%%Preg9%Qu departamento(s) no debe visitar ?-ok %departamento_debe_visitar(persona,lista de departamentos) departamento_no_debe_visitar(Per,LDep):-findall(Dep,no_debe_visitar(Per,Dep),LDep). %no_debe_visitar(persona,departamento) no_debe_visitar(Per,Dep):- tiene(Per,Enf),producido_por(Enf,Ing),contiene(Pla,Ing),pertenece_a(Pla,Dep). /************************************************************************************/
% Preg10%porcentaje de ingredientes beneficioso que hay x plato segun % enfermedad-ok porcentaje(persona) % porcentaje(Per):plato_puede_comer(Per,Pla),numero_ingredientes(Pla,Ni),ingredientes_recomendables(Per,Pla,Nir),Por 100*Nir/Ni,write(Pla),write('-->'),write(Por),write('%'). %numero de ingredientes x plato que previenen la enfermedad-ok %ingrediente(persona , platos , numero de ingredientes que debe comer) ingredientes_recomendables(Per,Pla,Nir):tiene(Per,Enf),findall(Ing,(contiene(Pla,Ing),prevenido_por(Enf,Ing)),L),longitud(L,Nir),write(Enf),write('-->'). /************************************************************************************/ %Preg11Que platos provienen de un Departamento platos_por_departamento(Dep,Lpla):-findall(Pla,pertenece_a(Pla,Dep),Lpla). /************************************************************************************/ %Preg12Que ingredientes contiene el plato %lista de ingredientes de un plato-ok %lista_ingre(plato,lista de ingredientes del plato) lista_ingre(Pla,Ling):- findall(Ing,contiene(Pla,Ing),Ling). /************************************************************************************/ %Preg13%Que enfermedades tiene una persona %lista de enfermedades que tiene-ok %lista_enfer(persona,lista de enfermedades que tiene) lista_enfer(Per,Lenf):- findall(Enf,tiene(Per,Enf),Lenf).
is
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% %% PREGUNTAS QUE RESPONDIMOS AL PROFESOR %%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%
consulta(Per,Pla):- tiene(Per,Enf),prevenido_por(Enf,Ing),contiene(Pla,Ing),pertenece_a(Pla,ucayali). %que medico debe tratar a periquita consultar_especialista(Per,Esp):- tiene(Per,Enf),atiende(Esp,Enf). %que platos "debe" comer periquita plato_debe_comer(Per,L):- platos_deberia_comer(Per,Lpla),elim_repet(Lpla,L).
%%% OBS: la diferencia esta en que "debe" come platos que le hace bien a %%% su enfermedad, en cambio en "puede" come platos que le hace bien y %%% paltos que no le hace bien ni mal a su enfermedad %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%
%cantidad de ingredientes por plato-ok %numero_ingredientes(plato,numero de ingredientes del plato) numero_ingredientes(Pla,Ni) :- findall(Ing,contiene(Pla,Ing),L),longitud(L,Ni).
%Elimina los elementos repetidos que est n en una lista*/ elim_repet([],[]):-!. elim_repet([X|M],S):-not(lista(X)), elimina_x(M,X,T),elim_repet(T,Y), concatenar([X],Y,S). elim_repet([X|M],S):-lista(X), elim_l1_de_l2(X,M,T),elim_repet(X,Y), elim_repet(T,J),concatenar([Y],J,S). %Determina si lo que recibe es una lista*/ lista([]):-!. lista([_|Y]):-lista(Y). /*------------------------------------------------------------------*/ /*Elimina todos los elementos de la lista 1 que est n en la 2*/ elim_l1_de_l2([],L,L):-!. elim_l1_de_l2([X|M],L,S):-elimina_x(L,X,T),elim_l1_de_l2(M,T,S). /*------------------------------------------------------------------*/ /*Concatena dos listas*/ concatenar([],L,L). concatenar([X|M],L,[X|Z]):-concatenar(M,L,Z). /*------------------------------------------------------------------*/
/*Elimina el elemento x de la lista en todos los niveles*/ elimina_x([],_,[]):-!. elimina_x([X],X,[]):-!. elimina_x([X|M],X,S):-elimina_x(M,X,S),!. elimina_x([R|M],X,S):-lista(R), elimina_x(R,X,T), elimina_x(M,X,P), concatenar([T],P,S). elimina_x([R|M],X,S):-elimina_x(M,X,T), concatenar([R],T,S). /*------------------------------------------------------------------*/
Reglas:
Plato_debe_comer(persona,X): Nos mostrar los platos que debe comer (que le hacen bien) el paciente. comida_puede_comer(Per,L): Nos mostrar los platos que puede comer (que no le hacen bien ni mal) el paciente. comidas_no_debe_comer(Per,Lpla) Nos mostrar los platos que no debe comer (que le mal hacen bien) el paciente. ingredientes_puede_comer(Per,Ling) Nos mostrar los ingredientes que debe comer (que le hacen bien) el paciente. ingredientes_no_puede_comer(Per,Ling) Nos mostrar los ingredientes que no debe comer (que le hacen dao) el paciente. comidas_debe_recetar(Esp,L) Nos mostrara la lista de comidas que el especialista debe recetar para que el paciente se cure. comidas_no_debe_recetar(Esp,L) Nos mostrara la lista de comidas que el especialista no debe recetar al paciente. departamento_debe_visitar(Per,LDep) Nos mostrara los departamento(s) que debe visitar el paciente, ya que en ese departamento sus platillos usan ingrediente que le hacen bien.
departamento_no_debe_visitar(Per,LDep) Nos mostrara los departamento(s) que no debe visitar el paciente, ya que en ese departamento sus platillos usan ingrediente que le hacen dao.
porcentaje(Per) nos mostrara el porcentaje de ingredientes beneficioso que hay x plato segn enfermedad