/*OBJETO : MAMIFEROS*/ code=4000 DOMAINS lista=symbol* /*(1) PREDICADOS DE LISTAS (UTILES)*/ PREDICATES pertenece(symbol,lista) long(lista,integer) CLAUSES pertenece(E,[E|_]). pertenece(E,[_|L]):-pertenece(E,L). long([],0). long([_|L],N):-long(L,NN),N=NN+1. /*(2) PREDICADOS DE BASE Y PREDICADOS DEDUCIDOS*/ PREDICATES isa(symbol,symbol) isag(symbol,symbol) ako(symbol,symbol) isp(symbol,symbol) pro(symbol,symbol,symbol) akog(symbol,symbol) ispg(symbol,symbol) progg(symbol,symbol,symbol) prog(symbol,symbol,symbol) CLAUSES /*AKO:PRIMER PREDICADO DE BASE*/ ako(cetaceo,mamifero). ako(ungulado,mamifero). ako(unguiculado,mamifero). ako(mistacoceto,cetaceo). ako(odontoceto,cetaceo). ako(caballo,ungulado). ako(artiodactilo,ungulado). ako(roedor,unguiculado). ako(familia1,unguiculado). ako(rorcual,mistacoceto). ako(ballena,mistacoceto). ako(cachalote,odontoceto). ako(delfin,odontoceto). ako(cerdo,artiodactilo). ako(rumiante,artiodactilo). ako(ciervo,rumiante). ako(bovido,rumiante). ako(toro,bovido). ako(rebeco,bovido). ako(cabra,bovido). ako(carnero,bovido). ako(conejo,roedor). ako(simplicentado,roedor). ako(ratones,simplicentado). ako(ardilla,simplicentado). ako(liron,simplicantado). ako(mono_gibraltar,familia1). ako(quiroptero,familia1). ako(familia2,familia1). ako(murcielago_herradura,quiroptero). ako(murcielago_orejudo,quiroptero). ako(pinnipedo,familia2). ako(insectivoro,familia2). ako(carnivoro,familia2). ako(foca_comun,pinnipedo). ako(foca_fraile,pinnipedo). ako(erizo,insectivoro). ako(topo,insectivoro). ako(musarana,insectivoro). ako(oso_pardo,carnivoro). ako(gineta,carnivoro). ako(mustelido,carnivoro). ako(gato,carnivoro). ako(lobo,carnivoro). ako(garduna,mustelido). ako(tejon,mustelido). ako(nutria,mustelido). isa(rorcual1,rorcual). isa(ballena1,ballena). isa(cachatote1,cachalote). isa(delfin1,delfin). isa(cerdo1,cerdo). isa(ciervo1,ciervo). isa(toro1,toro). isa(rebeco1,rebeco). isa(cabra1,cabra). isa(canero1,carnero). isa(conejo1,conejo). isa(raton1,ratones). isa(ardilla1,ardilla). isa(liron1,liron). isa(mono_gibraltar1,mono_gibraltar). isa(murcielago_herradura1,murcielago_herradura). isa(murcielago_orejudo1,murcielago_orejudo). isa(foca_comun1,foca_comun). isa(foca_fraile1,foca_fraile). isa(erizo1,erizo). isa(topo1,topo). isa(musarana1,musarana). isa(oso_pardo1,oso_pardo). isa(gineta1,gineta). isa(gato1,gato). isa(lobo1,lobo). isa(garduna1,garduna). isa(tejon1,tejon). isa(nutria1,nutria). /*ISPart:SEGUNDO PREDICADO DE BASE*/ isp(mamas,mamifero). isp(extremidades_2,cetaceo). isp(extremidades_4,ungulado). isp(pezu¤as,ungulado). isp(extremidades_4,unguiculado). isp(u¤as,unguiculado). isp(alas,quiroptero). isp(no_alas,familia2). isp(aletas,pinnipedo). isp(no_aletas,insectivoro). isp(no_aletas,carnivoro). isp(incisivos_6,foca_comun). isp(incisivos_4,foca_fraile). isp(no_dientes,mistacoceto). isp(orificios_nasales_2,mistacoceto). isp(dientes,odontoceto). isp(orificio_nasal_1,odontoceto). isp(aleta_dorsal_1,rorcual). isp(no_aleta_dorsal,ballena). isp(no_cuernos,cerdo). isp(cuernos,rumiante). isp(cuernos_macho,ciervo). isp(dedos_grandes_2,ciervo). isp(dedos_2,bovido). isp(incisivos_superiores_4,conejo). isp(incisivos_inferiores_2,conejo). isp(incisivos_superiores_2,simplicentado). isp(molares_12,ratones). isp(molares_18,ardilla). isp(molares_16,liron). isp(puas,erizo). isp(pelo,topo). isp(pelo,musarana). isp(dedos_5,gineta). isp(molares_superiores_12,gineta). isp(dedos_5,mustelido). isp(molares_superiores_8_o_10,mustelido). isp(manos_dedos_5,gato). isp(pies_dedos_4,gato). isp(dientes_30,gato). isp(manos_dedos_5,lobo). isp(pies_dedos_4,lobo). isp(no_caninos,roedor). isp(caninos,familia1). /*PROPIEDAD:TERCER PREDICADO DE BASE*/ pro(mamifero,alimento_crias,leche). pro(cetaceo,lugar,marino). pro(caballo,num_dedos,impares). pro(artiodactilo,num_dedos,pares). pro(roedor,tamano_incisivos,pequeno). pro(roedor,lugar_incisivos,fuera_boca). pro(insectivoro,tama¤o_caninos,pequeno). pro(familia1,tama¤o_incisivos,pequeno). pro(familia1,lugar_incisivos,dentro_boca). pro(mono_gibraltar,forma_pulgar,oponible). pro(quiroptero,forma_pulgar,no_oponible). pro(quiroptero,forma_u¤as,comprimida). pro(pinnipedo,forma_cuerpo,fusiforme). pro(pinnipedo,tama¤o_cola,corta). pro(pinnipedo,lugar,marino). pro(carnivoro,tama¤o_caninos,pequeno). pro(cachalote,forma_orificio_nasal,longitudinal). pro(delfin,forma_orificio_nasal,transversal). pro(delfin,forma_graganta,lisa). pro(delfin,num_dientes,muchos). pro(rorcual,forma_graganta,surcos). pro(ballena,forma_graganta,lisa). pro(cerdo,caninos_respecto_incisivos,distintos). pro(cerdo,num_denticion,completa). pro(cerdo,tipo_comida,omnivoro). pro(rumiante,caninos_respcto_incisivos,analogos). pro(rumiante,num_denticion,incompleta). pro(rumiante,tipo_comida,herbivoro). pro(ciervo,forma_cuenos,ramificados). pro(bovido,forma_cuernos,no_ramificados). pro(toro,forma_cuernos,rectos). pro(rebeco,forma_cuernos,curvados). pro(cabra,forma_cuernos,altos). pro(carnero,forma_cuernos,enrrollados). pro(conejo,tama¤o_cola,pequeno). pro(ratones,tipo_cola,no_velluda). pro(ardilla,tipo_cola,velludo). pro(liron,tipo_cola,velludo). pro(murcielago_herradura,posicion_nariz,sobre_hocico). pro(murcielago_herradura,tipo_orejas,no_trago). %parte? pro(murcielago_orejudo,posicion_nariz,en_extremo_hocico). pro(murcielago_orejudo,tipo_orejas,con_trago). %parte? pro(erizo,tama¤o,grande). pro(topo,tama¤o,pequeno). pro(topo,extremidades_relacion_extemidades,diferente). pro(musarana,tama¤o,pequeno). pro(musana,extremidades_relacion_extremidades,iguales). pro(oso_pardo,tama¤o,grande). pro(oso_pardo,tipo_cola,rudimentario). pro(gineta,tama¤o,pequeno). pro(gineta,tipo_cola,no_rudimentario). pro(gineta,tama¤o_cola,largo). pro(mustelido,tama¤o,pequeno). pro(mustelido,tipo_cola,no_rudimentario). pro(mustelido,tama¤o_cola,corto). pro(gato,tama¤o,pequeno). pro(gato,tipo_cola,no_rudimentario). pro(gato,tipo_u¤as,retractiles). pro(lobo,tama¤o,pequeno). pro(lobo,tipo_cola,no_rudimentario). pro(lobo,tipo_u¤as,no_retractiles). pro(garduna,tipo_plantas_pies,velludo). pro(tejon,tipo_plantas_pies,desnudo). pro(nutria,tipo_dedos,membrana_interdigital). %parte? /*ISA GENERAL:CIERRE DE ISA*/ isag(X,Y):-isa(X,Y). isag(X,Y):-isa(X,Z),isag(Z,Y). /*AKO GENERAL:CIERRE TRANSITIVO DE AKO*/ akog(X,Y):-ako(X,Y). akog(X,Y):-ako(X,Z),akog(Z,Y). /*ISP GENERAL:CON LA HIPOTESIS HEREDITARIA*/ ispg(X,Y):-isp(X,Y). ispg(X,Y):-ako(Y,Z),ispg(X,Z). ispg(X,Y):-isa(Y,Z),ispg(X,Z). /*PRO GENERAL:CON LA HIPOTESIS HEREDITARIA POR DEFECTO*/ progg(X,A,V):-pro(X,A,V),!. progg(X,A,V):-isa(X,Y),progg(Y,A,V). progg(X,A,V):-ako(X,Y),progg(Y,A,V). prog(X,A,V):- pertenece(A,[lugar,num_dedos,alimento_crias,tipo_comida,tama¤o_incisivos, lugar_incisivos,voz,sexo,periodo_originario,forma_pulgar,tama¤o, forma_u¤as,forma_cuerpo,tama¤o_cola,tama¤o_caninos,forma_orificio_nasal, forma_garganta,num_dientes,canino_respecto_incisivos,tipo_denticion, forma_cuernos,tama¤o_cola,tipo_cola,extremidades_respecto_extremidades, tipo_u¤as,tipo_plantas_pies,membrana_dedos]), progg(X,A,V). /*(3) MODULO DE INTERROGACION*/ PREDICATES run runn transformar(symbol,lista) responder(lista) CLAUSES /*LANZAR EL PROGRAMA*/ run:-write(" PUEDES PREGUNTAR COSAS DEL TIPO :"),nl, write("que es "),nl,write("EJEMPLO: que es gato"),nl, write("quien es "),nl,write("EJEMPLO: quien es gato"),nl, write("partes de "),nl,write("EJEMPLO: partes de erizo"),nl, write("en que "),nl,write("EJEMPLO: en que puas"),nl, write("cuales propiedades "),nl,write("EJEMPLO:cuales propiedades gato"),nl, write("cual "),nl,write("EJEMPLO:cual tama¤o gato"),nl, write("PROPIEDADES:peso,talla,alimento_crias,alimentacion,forma_caza,color,voz,sexo,periodo_originario,cubierto"), runn. /*BUCLE DE INTERACTIVIDAD*/ runn:-makewindow(3,3,7,"PREGUNTAR",1,37,21,39),cursor(0,10), write("HAZ UNA PREGUNTA"),nl, readln(L),transformar(L,Q),responder(Q),nl, makewindow(10,7,123,"",19,39,3,34), % cursor(3,20), write("¨quieres continuar ? (s/n)"), readchar(C),C='s',nl,nl,runn. /*TRANSFORMA UNA FRASE EN LA LISTA DE SUS PALABRAS*/ transformar("",[]). transformar(S,[E|L]):-fronttoken(S,E,R),transformar(R,L). /*RESPONDE A LA PREGUNTA EN FORMA DE LISTA*/ responder(L):-long(L,N),N<>3,!,nl, write(" ­pregunta mal hecha!"),nl, write(" PRESIONA UNA TECLA"),readln(_),run. responder([que,_,X]):-write(X," es :"),nl,akog(X,R), write(R," "),fail. responder([quien,_,X]):-akog(R,X),write(R," es :",X),nl,fail. responder([quien,_,X]):-isag(R,X),write(R," es :",X),nl,fail. responder([partes,_,X]):-write("las partes de ",X," son :"),nl, ispg(R,X),write(R," "),fail. responder([en,_,X]):-write(X," esta en :"),nl, ispg(X,R),write(R," "),fail. responder([cuales,propiedades,X]):-write("las propiedades de ",X," son : "),nl, prog(X,A,V),write(A," ",V),nl,fail. responder([Q,A,X]):-pertenece(Q,[cual]), write("la propiedad ",A," de ",X," es :"), prog(X,A,V),write(V),fail. responder(_):-nl. GOAL makewindow(1,7,112,"",0,0,23,78), makewindow(2,3,7,"PREGUNTAS",1,1,21,36), run.