You are on page 1of 6

%%platos que hay plato(arroz_con_pollo). plato(tallarin_rojo). plato(cebiche). %%%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). %%%enfermedades que hay enfermedad(colesterol). enfermedad(vista). enfermedad(anemia). enfermedad(gripe). %%%especialidades medicas especialidad(oftalmologo). especialidad(medico_general). especialidad(otorrino). %%%contenido de cada plato %arroz con pollo% contiene(arroz_con_pollo,aceite). contiene(arroz_con_pollo,arroz). contiene(arroz_con_pollo,pollo). contiene(arroz_con_pollo,arverja). contiene(arroz_con_pollo,zanahoria). contiene(arroz_con_pollo,culantro). contiene(arroz_con_pollo,sal).

%tallarin rojo% contiene(tallarin_rojo,zanahoria). contiene(tallarin_rojo,fideo). contiene(tallarin_rojo,sal). contiene(tallarin_rojo,tomate). contiene(tallarin_rojo,carne). contiene(tallarin_rojo,ajos). contiene(tallarin_rojo,cebolla).

%cebiche% contiene(cebiche,sal). contiene(cebiche,pescado). contiene(cebiche,ajos). contiene(cebiche,cebolla). contiene(cebiche,limon).

%ingrediente que producen una enfermedad producido_por(colesterol,aceite). producido_por(colesterol,carne).

%ingrediente que previenen una enfermedad prevenido_por(colesterol,ajos). 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). %especialista que atiende la enfermedad atiende(oftalmologo,vista). atiende(medico_general,colesterol). atiende(medico_general,anemia). atiende(otorrino,gripe). %pacientes que tenemos con su enfermedad que tienen

tiene(juan,gripe). tiene(ana,anemia). tiene(ana,colesterol). tiene(aldo,anemia). tieneL(ana,[anemia,colesterol]). tieneL(aldo,[anemia]). %%%lista de plato con sus ingredientes lista(arroz_con_pollo,[aceite,arroz,pollo,arverja,zanahoria,culantro,sal]). lista(tallarin_rojo,[zanahoria,fideo,sal,tomate,carne,ajos,cebolla]). lista(cebiche,[sal,pescado,ajos,cebolla,limon]). %%%REGLAS %que comidas puede comer-ok comida_puede_comer(W,X) :- tiene(X,Y),prevenido_por(Y,Z),contiene(W,Z). comida_no_debe_comer(W,X) :- tiene(X,Y),producido_por(Y,Z),contiene(W,Z). comida_debe_recetar(W,X) :- atiende(X,Y),prevenido_por(Y,Z),contiene(W,Z). %cantidad de ingredientes por plato-ok tiene_ingredientes(X,Y) :- lista(X,W),longitud(W,Y). %longitud normal de una lista-ok longitud([],0). longitud([X|Y],S) :- longitud(Y,T), S is T + 1.

%cantidad de ingredientes del plato segun enfermedad prueba(X,Y,Z) :- lista(X,W),,prueba1(X,Y,W,Z). prueba1(Z,W,[X|Y],Z):- . /* tiene_ingre(X,Y,Z) :- lista(X,W),comida_puede_comer(Y),ele_por_enfer(X,Y,W,Z). ele_por_enfer(Z,W,[],0). ele_por_enfer(Z,W,[X|Y],S) :- not(prevenido_por(Z,X)),ele_por_enfer(Z,Y,T), S is T +0. ele_por_enfer(Z,W,[X|Y],S) :- prevenido_por(Z,X),ele_por_enfer(Z,Y,T), S is T + 1. */

%ingredientes q puede comer ingredientes_puede_comer(X,Y) :- comida_puede_comer(X,W),contiene(W,Y),a_comer(X,Y). a_comer(X,Y) :- tieneL(X,W),verifica_ingre(W,Y). verifica_ingre([],_). verifica_ingre([X|Y],Z) :- producido_por(X,Z),verifica_ingre(Y,Z).

long([],0) :- !. long([X|Y],S) :- long(Y,T),!, S is T + 1. contar_lista(X) :- findall(Y,contiene(X,Y),L). elemento([X|R],X). %A esto se le llama el caso base. elemento([X|R],Y) :- elemento(R,Y).

busca_elem([],0) :-!. busca_elem([X|Y],S) :- prevenido_por(gripe,X),busca_elem(Y,T),!, S is T+1.

%cantid de ingredientes q la persona puede comer por plato %% X=persona Y=plato, Z=numero de ingre por plato cant_ingre_persona_come_por_plato(X,Y,Z) :- puede_comer(X,Y),cant_ingre_come(X,Y,Z). cant_ingre_come(X,Y,Z) :- tiene(X,W),mina(W,Y,[sal,pescado,ajos,cebolla,limon,zanahoria],Z). mina(Z,W,[],0). mina(Z,W,[X|Y],S) :- not(prevenido_por(Z,X)),contiene(W,X),mina(Z,W,Y,T), S is T + 0. mina(Z,W,[X|Y],S) :- prevenido_por(Z,X),contiene(W,X),mina(Z,W,Y,T), S is T + 1 .

%cantidad de ingredientes que previenen la enfermedad %X = enfermedad , y = salida numero persona_plato(X,Y) :- tiene(X,Z),lista(Z,W),ele_por_enfer(X,W,Y). tiene_ingre(X,Y) :- lista(X,W),ele_por_enfer(X,W,Y). ele_por_enfer(Z,[],0). ele_por_enfer(Z,[X|Y],S) :- not(prevenido_por(Z,X)),ele_por_enfer(Z,Y,T), S is T +0. ele_por_enfer(Z,[X|Y],S) :- prevenido_por(Z,X),ele_por_enfer(Z,Y,T), S is T + 1.

%cantidad de ingredientes por plato %X =plato , y = salida numero persona_puede(X,Z,Y) :- comida_puede_comer(X,Z),cant_ingre(Z,Y). cant_ingre(X,Y,Z) :- plato(Y),lista(Y,W),ele_por_plato(X,W,Z). ele_por_plato(Z,[],0). ele_por_plato(Z,[X|Y],S) :- not(contiene(Z,X)),ele_por_plato(Z,Y,T), S is T +0. ele_por_plato(Z,[X|Y],S) :- contiene(Z,X),ele_por_plato(Z,Y,T), S is T + 1. %porcentaje plato por enfermedad porcentaje(X,W) :- tiene(X,K),tiene_ingre(K,T),cant_ingre(puede_comer(X,Z),L), W is 100 * T / L. aja(W) :- w = tiene_ingre(gripe,R).