HOLA MUNDO implement main implement main open core open core,,stdio, stdio,math clauses run():run (): console:: console::init init(), (), write( write("Hola, Escuela Politécnica de Chimborazo! Chimborazo!n n"") end implement implement main main oal mainE#e oal mainE#e:: ::run run((main:: main::run run) ) $%%%%%%%%%%%%%%%%%%%%% $%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%$ %$
QUES DEPORTE GUSTA El e&er' hace reerencia al deporte ue les usta a un rupo de personas * El e&er' se desea conocer ue deporte le usta a +aier +aier,, si a él le usta el deporte ue le usta a su primo uan uan implement main implement main open core open core,,stdio, stdio,math class acts acts--usta./ usta:( usta:(strin strin 0ombre 0ombre,,strin ueo ueo) ) class predicates ustar:( ustar:(strin strin +, strin 1) nondeterm an*low an*low clauses ustar( ustar("#aier" "#aier",, 2ctiidad 2ctiidad):):- usta usta(("&uan" "&uan",, 2ctiidad 2ctiidad) ) class predicates reconsult:( reconsult:(strin strin 3ile0ame 3ile0ame) ) clauses reconsult( reconsult(3ile0ame 3ile0ame):): retract2ll( retract2ll( 4, 4,usta./), usta./), ile:: ile::consult consult((3ile0ame 3ile0ame,,usta./) usta./)
clauses run():run (): console:: console::init init(), (), write ("Carar .atosn .atosn""), reconsult ("e&er't#t" "e&er't#t"), ), write( write("n n 2 2 5ioanna le usta el "), " ), +6"ioanna" "ioanna",, usta( usta(+,1), write (1), write( write("n n""), ail ail
run():run():console:: console::init init(), (), reconsult( reconsult("e&er't#t" "e&er't#t"), ), write( write("n n 78ué 78ué le usta a +aier9 n n""), write( write("le usta el "), "),
ustar ("#aier" "#aier",, 2ctiidad 2ctiidad), ), write (2ctiidad 2ctiidad), ), write( write("n n""), ail ail
run():run():write (" n n in in del test n n"")
end implement implement main main oal mainE#e oal mainE#e:: ::run run((main:: main::run run) )
$%%%%%%%%%%%%%%%%%%%%% $%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%$ %%%%%%%$
QUIEN PUEDE COMPRAR UN CARRO 2 continuaci;n se presenta el e&ercicio e is<= reerente a la compra de un carro carro >e desea >e desea conocer uien puede comprar un carro carro En En este este e&ercicio se reuiere ue se escriba una base de datos dentro del archio eis<= en la carpeta e#e, e#e, utilizando por e&emplo el bloc de notas con la e#tensi;n t#t, t#t, desde el cual el prorama escrito en eis<= eis<=pro, pro, e#traer? la inormaci;n reuerida reuerida implement main implement main open open core core,,stdio, stdio,math class acts - compra./ persona:( persona:(s*mbol s*mbol 0ombre 0ombre) ) carro:( carro:(s*mbol s*mbol @arca @arca) ) usta:( usta:(s*mbol s*mbol 0ombre 0ombre,,s*mbol @arca @arca)) de4enta:( de4enta:(s*mbol s*mbol @arca @arca) ) class predicates puede4comprar:( puede4comprar:(strin strin +, strin 1) nondeterm an*low an*low clauses puede4comprar( puede4comprar(+,1):):-persona persona((+), ),carro carro((1), ),usta usta((+,1), ), de4enta de4enta((1) class predicates reconsult:( reconsult:(strin strin 3ile0ame 3ile0ame) ) clauses reconsult( reconsult(3ile0ame 3ile0ame):):-retract2ll retract2ll(( 4, 4,compra./), compra./ ), ile ile:: ::consult consult((3ile0ame 3ile0ame,,compra./) compra./ ) clauses run():run (): console:: console::init init(), (), write( write("Carar .atosn .atosn""), reconsult( reconsult("eis<=t#t" "eis<=t#t"), ), write( write("n nuien uien puede comprar un carron carron""), puede4comprar( puede4comprar(+,1), write (+), write( write("n n""), ail ail run():run (): write( write("n nue ue carro puede comprar ioanna * antonion antonion""), puede4comprar( puede4comprar(+,1), write (1), write( write("n n""), ail ail run():run ():-
write( write("n n2 2 5ioanna ue carro le ustan ustan""), +6"5ioanna" "5ioanna",, usta( usta(+,1), write (1), ail ail run():run ():write( write("n n3in 3in del Aestn Aestn"")
end implement implement main main oal mainE#e oal mainE#e:: ::run run((main:: main::run run) ) $%%%%%%%%%%%%%%%%%%%%% $%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%$ %%%%%%%%%$
QUE LE GUSTA A UN GRUPO DE PERSONAS El e&ercicio eis< busca determinar ue le usta a un rupo de personas o a una El e&ercicio persona en particular particular implement main implement main open core open core,,stdio, stdio,math class acts - ustar./ usta : (strin 0ombre 0ombre,, strin .eporte .eporte) ) class predicates reconsult : (strin 3ile0ame 3ile0ame) ) clauses reconsult( reconsult(3ile0ame 3ile0ame):):-retract2ll retract2ll(( 4, 4,ustar./), ustar./), ile:: ile::consult consult((3ile0ame 3ile0ame,,ustar./) ustar./) clauses run():run (): console:: console::init init(), (), write( write("carar datosn datosn""), reconsult( reconsult("ustat#t" "ustat#t"), ), write( write("n n8ue 8ue le usta a >usanan >usana n""), +6">usana" ">usana",, usta( usta(+,1), write (1), ail ail
run():run():write( write("n n2 2 uien le usta la natacion * la lectura lecturan n""), 16"natacion" "natacion",, B6"lectura" "lectura",, usta( usta(+,1), write (+ ), ail ail
run():run():write( write("n n3in 3in del Aestn Aestn"")
end implement implement main main oal mainE#e oal mainE#e:: ::run run((main:: main::run run) )
$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
PADRE MADRE Y ABUELO El e&ercicio siuiente habla sobre la amilia, * la relaci;n de parentesco, * desea saber uien es padre, madre, abuelo implement main open core,stdio,math domains enero 6 emenino() masculino() class acts - amilia./ persona : (strin 0ombre, enero 5enero) pariente : (strin Persona, strin Pariente) class predicates padre : (strin Persona, strin Padre) nondeterm an*low clauses padre(Persona, Padre) :-pariente(Persona, Padre), persona(Padre, masculino()) class predicates madre : (strin Persona, strin @adre) nondeterm an*low clauses madre(Persona, @adre) :-pariente(Persona, @adre), persona(@adre, emenino()) class predicates abuelo : (strin Persona, strin 2buelo) nondeterm an*low clauses abuelo(Persona, 2buelo) :-pariente(Persona, Pariente), padre(Pariente, 2buelo) class predicates ancestro : (strin Persona, strin 2ntepasado) nondeterm an*low clauses ancestro(Persona, 2ntepasado) :-pariente(Persona, 2ntepasado) ancestro(Persona, 2ntepasado) :-pariente(Persona, P'), ancestro(P', 2ntepasado) class predicates reconsult : (strin 0ombre3ichero) clauses reconsult(0ombre3ichero) : retract2ll( 4, amilia./), ile::consult(0ombre3ichero, amilia./) clauses run(): console::init(), write("Carar los datosn"), reconsult("at#t"), write("ntest del padren"), padre(+, 1), write ("D es el padre de Dn", 1, +),
ail run(): write("ntest de la madren"), madre(B,), write ("D es el hi&o de Dn", B,), ail run(): write("n test del abuelon"), abuelo(+, 1), write ("D es el abuelo de Dn", 1, +), ail
run():write("n test del ancestro de 5ioanna n"), + 6 "5ioanna", ancestro(+, 1), write ("D es el ancestro de Dn", 1, +), ail
run():write("3in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
CONSULTA AUTOMOVILES El e&ercicio eis
reconsult(3ile0ame): retract2ll( 4,carros./), ile::consult(3ile0ame,carros./) clauses run(): console::init(), write("carar datosn"), reconsult("carrot#t"), write("nE#iste un automoil ue cuesta =F<<<n"), Precio6=F<<<, automoil( @arca, ilometra&e, 2Io, Color,Precio), write (@arca), ail
run():write("nE#iste un ehiculo ue cueste menos de =<<<<n"), ehiculo( @arca, ilometra&e, 2Io, Color, Precio), write (@arca), write("n"), ail
run():write("nE#iste un ehiculo color naran&an"), Color6"naran&a", ehiculos( @arca, ilometra&e, 2Io, Color, Precio), write (@arca), ail
run():write("n3in del Aestn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
OTRO CARROS 2 continuaci;n tenemos el e&ercicio eis
clauses ehiculo( @arca, ilometra&e, 2Io, Color, Precio):-automoil( @arca, ilometra&e, 2Io, Color, Preci o),PrecioJ=<<<< camion( @arca, ilometra&e, 2Io, Color, Precio),PrecioJ=<<<< class predicates ehiculos:(strin @arca, inteer ilometra&e, inteer 2Io, strin Color, inteer Precio) nondeterm an*low clauses ehiculos( @arca, ilometra&e, 2Io, Color, Precio):-automoil( @arca, ilometra&e, 2Io, Color, Precio) camion( @arca, ilometra&e, 2Io, Color, Precio) class predicates reconsult : (strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,carros./), ile::consult(3ile0ame,carros./) clauses run(): console::init(), write("carar datosn"), reconsult("carrot#t"), write("nE#iste un automoil ue cuesta =F<<<n"), Precio6=F<<<, automoil( @arca, ilometra&e, 2Io, Color,Precio), write (@arca), ail
run():write("nE#iste un ehiculo ue cueste menos de =<<<<n"), ehiculo( @arca, ilometra&e, 2Io, Color, Precio), write (@arca), write("n"), ail
run():write("nE#iste un ehiculo color naran&an"), Color6"naran&a", ehiculos( @arca, ilometra&e, 2Io, Color, Precio), Dwrite(@arca), write (@arca), ail
run():write("n3in del Aestn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
SUMA NUMEROS LEIDOS El prorama del e&emplo siuiente realiza la suma * multiplicaci;n de = numeros ue son inresados desde consola implement main open core,console,stdio,math
domains suma 6 inteer numero6 inteer producto6 inteer class predicates sumar:(numero, numero,suma) procedure (i,i, o) clauses sumar(+,1,>uma) :->uma6+M1 class predicates multiplicar:(numero, numero,producto) procedure (i,i, o) clauses multiplicar(B,,@ultiplicar) :-@ultiplicar6B% clauses run(): console::init(), write("ninrese dos cantidades, despes de cada cantidad pulse entern"), write("nsuman"), sumar(read(),read(), >), write(>), nl, write("nmultiplican"), multiplicar(read(),read(), @), write(@), nl end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
NUMERO DE TELEFONO A QUIEN PERTENECE En el prorama eisN se tiene una base de datos ue contiene la inormaci;n del teléono de un rupo de personas, permite realizar bOsuedas del teléono de una persona o a uien pertenece un nOmero determinado implement main open core,stdio,math class acts - teleono./ numeroAeleono:(s*mbol 0ombre, s*mbol 0umero) class predicates reconsult:(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,teleono./), ile::consult(3ile0ame,teleono./) clauses run(): console::init(), write("Carar .atosn"), reconsult("eis
+6"Carolina", numeroAeleono(+,1), write (1), write("n"), ail
run():write("n2 ue persona o personas pertenece el nmero =Q<
run():write("n3in del Aestn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
VER SI UN VALOR ES O NO LETRA implement main open core,console,stdio,math class predicates esRetra: (char) nondeterm an*low clauses $% Cuando se aplica a caracteres, S J6 S siniica "ue alabeticamente precede o es iual al mismo" %$ esRetra(Caracter):-SaS J6 Caracter, Caracter J6 SzS esRetra(Caracter):-S2S J6 Caracter, Caracter J6 SS clauses run(): console::init(), write(">i es una letra pona -->i es una letra-- caso contrario no pona nada nn"), write("Tndiue si el = es una letra nn"), Caracter6S=S, esRetra (Caracter), write (">i es una letra"), ail
run():write("Tndiue si la L es una letra n"), D stdTU::write(">i es una letra pona un >i caso contrario no pona nada n"), Caracter6SLS, esRetra (Caracter), write (">i es una letra"), ail
run():write("n3in del Aestn")
end implement main oal mainE#e::run(main::run)
$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
QUIENES SON PADRES El prorama eis'< muestra el uso de los arumentos comunes en la declaraci;n de los hechos * predicado para lo cual usa un dominio tipo s*mbol implement main open core,stdio,math domains persona 6 s*mbol class acts - padre./ papa:(persona,persona) D Vna persona es el papa de la otra persona class predicates padre:(persona) nondeterm an*low D Esta persona es un padre clauses padre(Hombre):-papa(Hombre, 4) class predicates reconsult : (strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,padre./), ile::consult(3ile0ame,padre./) clauses run():-console::init(), write("8uienes son padres n"), reconsult("padret#t"), padre(Hombre), write (Hombre), write("n"), ail
run():write("n3in del Aestn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
CUAL NOVELA ES EXTENSA Cuando Prolo intenta cumplir con la meta escribio(+ , 1), debe probar cada cl?usula de escribio en el prorama para un empare&amiento En el esuerzo por e mpare&ar los arumentos + e 1 con los arumentos encontrados en cada cl?usula de escribio, Prolo inestiar? desde la cima hasta el ondo del prorama Cuando encuentra una cl?usula ue empare&a la meta, lia alores para librar ariables, para ue la meta * la cl?usula sean idénticas se dice ue la meta se uniica con la cl?usula Esta unci;n de empare&ar se llama uniicaci;n El prorama denominado noela determina cual es una noela e#tensa implement main open core,stdio,math class acts - obra./ escribio:( strin 2utor, strin Aitulo )
libro:(strin Aitulo, inteer Painas)
class predicates noela4e#tensa:(strin Aitulo)nondeterm an*low clauses noela4e#tensa(Aitulo):-escribio( 4,Aitulo), libro(Aitulo,Ronitud), Ronitud W<< class predicates reconsult :(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,obra./), ile::consult(3ile0ame,obra./) clauses run(): console::init(), write("carar datosn"), reconsult("obrat#t"), write("n 8uien escribio @U/1 .TC n"), Aitulo6"@U/1 .TC", escribio(+,Aitulo), write (+), ail run(): write("n ue noela es e#tensa n"), noela4e#tensa(+), write (+), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
COMIDA QUE LE GUSTA A UNA PERSONA 2 menudo, al resoler problemas reales, usted debe seuir un camino a su conclusi;n l;ica >i esta conclusi;n no da la respuesta ue usted estaba buscando, usted debe escoer un camino alterno Cuando Xisual Prolo empieza a buscar una soluci;n a un problema (o meta), podrGa tener ue decidir entre dos posibles casos Pone un marcador a la biurcaci;n (conocido como un punto de bacLtracLin) * selecciona la primera submeta para seuir >i esa submeta alla (euialente a alcanzar un e#tremo muert o), Xisual Prolo desechar? el puntote bactracLin * probar? una submeta alterna 2uG es un e&emplo: .etermina la comida ue le usta a una persona implement main open core,stdio,math class acts - comida./ comida:(strin 0ombre) sabor:(strin 0ombre, strin Aipo) class predicates
usta:(strin 0ombre, strin +)nondeterm an*low clauses usta("carla",+):-comida(+), 16"bueno", sabor(+,1) class predicates reconsult:(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,comida./), ile::consult(3ilename,comida./) clauses run(): console::init(), reconsult("comidat#t"), write("n 8ue le usta a Carlan"), usta("carla",+), write("a carla le usta : n "), write ( +), ail
run():write("n Comidas E#istentesn"), comida(+), write ( +), write("n"), ail
run():write("n 8ue sabor tiene las coles de bruselasn"), +6"col4brusela", sabor(+,>abor), write("las coles de bruselas tienen un sabor "), write ( >abor), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
PARTIDO DE IDA Y VUELTA NIÑOS Xisual Prolo realiza una bOsueda implacable de todas las soluciones ue puedan e#istir Considere el siuiente prorama ue contiene hechos sobre los nombres * edades de alunos niIos &uadore s de tenis de una escuela >e desea realizar un torneo en el cual &ueen partidos de ida * uelta entre niIos de la misma edad implement main open core,stdio,math class acts - edad./ &uador:(strin Persona, inteer Edad) class predicates
reconsult:(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,edad./), ile::consult(3ile0ame,edad./) clauses run(): console::init(), reconsult("niIoedadt#t"), write("nn"), &uador(Persona,''), &uador(Persona=,''), PersonaJWPersona=, write(Persona," &uea contra ", Persona=," n"), ail
run():write("n n")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% $ GUSTO DE UNA PERSONA 2ntes de ue la ealuaci;n de la meta empiece, el ?rbol de la meta consiste en dos submetas insatisechas En los diaramas de ?rbol de las metas siuientes, una submeta satisecha en el ?rbol de la meta es marcad o con una subra*a, * la cl?usula correspondiente se muestra ba&o esa submeta implement main open core,stdio,math domains persona6s*mbol cosa 6 s*mbol class acts-lee./ lee:(persona) esta4interesado:(persona) class predicates usta:(persona, cosa) nondeterm an*low clauses usta("&uan","tabaco"):-! usta("luis","nadar"):-! usta("&uan","ino"):-! usta("luis","ino"):-! usta("luis","peliculas"):-! usta(,"libros"):-lee(), esta4interesado() class predicates reconsult:(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,lee./), ile::consult(3ile0ame,lee./) clauses run():-
console::init(), reconsult("lecturat#t"), write("nn"), usta(+,"ino"), usta(+,"libros"), write(+," n"), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
ANIMALES QUE PUEDEN NADAR El siuiente sotware permite determinar los animales ue pueden nadar implement main open core,stdio,math class acts - animales./ tipo:(strin 0ombre, strin Cateoria ) es4un:(strin 2nimal ,strin Cateoria ) ie:(strin 2nimal, strin Ruar) class predicates puede4nadar:(strin 2nimal)nondeterm an*low clauses puede4nadar(1):-tipo("animal",+), es4un(1,+), ie(1, "en4aua") class predicates reconsult :(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,animales./), ile::consult(3ile0ame,animales./) clauses run(): console::init(), write("carar datosn"), reconsult("animalest#t"), write("n8ue animal puede nadar9n"), puede4nadar(+), write (+), write("n"), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run)
$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
X PADRE DE Y En ciertas situaciones, es necesario orzar el retroceso para encontrar soluciones alternas Prolo proporciona un predicado especial, ail, para orzar el racaso * por eso proocar el retroceso El eecto del predicado ail corresponde al eecto de la comparaci;n = 6 o cualuier otra submeta imposible El siuiente prorama ilustra el uso de este predicado especial implement main open core,stdio,math domains nombre 6 s*mbol class acts - padre./ padre:(nombre, nombre) class predicates reconsult:(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,padre./), ile::consult(3ile0ame,padre./) clauses run(): console::init(), reconsult("padret#t"), write("nn"), padre(+,1), write(+ ," padre de " ,1, "n"), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
COMPRA DE UN CARRO El prorama eis'Y se trata sobre la compra de un carro, en unci;n de la marca * si este es bonito * su precio es ma*or a Z =F<<< implement main open core,stdio,math class acts-carro./ carro:(s*mbol,s*mbol,inteer) color:(s*mbol,s*mbol) class predicates carro4comprar:(s*mbol,s*mbol) nondeterm an*low clauses carro4comprar(@odelo,Color) :-carro(@odel,Color,Precio), color(Color,"bonito"),!, Precio W =F<<<
class predicates reconsult :(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,carro./), ile::consult(3ile0ame,carro./) clauses run(): console::init(), write("carar datosn"), reconsult("carrot#t"), write("n Puede comprar un carro corette n"), @odelo6 "corette", carro4comprar(@odelo, Color), write(@odelo, Color), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
UNA PERSONA ES AMIGO DE Como otro e&emplo, considere el prorama siuiente E&ecute este prorama * realice la preunta amio(bernardo , 8uien) implement main open core,stdio,math class predicates amio:(s*mbol,s*mbol) nondeterm an*low chica:(s*mbol) nondeterm an*low usta:(s*mbol,s*mbol)nondeterm an*low clauses amio("/ernardo","aneth"):-chica("aneth"), usta("/ernardo","aneth"),! amio("/ernardo","uan"):-usta("uan","utbol"),! amio("/ernardo",">usana"):-chica(">usana") chica("@aria")Ddesde auGhacia aba&o es me&or ubicar en un archio t#t chica("aneth") chica(">usana") usta("uan","utbol") usta("/ernardo","susana") clauses run(): console::init(), write("n /ernardo amio de uién es9 n"), amio("/ernardo" , 8uien), write("/ernardo es amio de ", 8uien), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
ESTUDIANTES QUE SE GRADUARON CON HONORES Este prorama demuestra c;mo usted puede usar el predicado not para identiicar a un estudiante ue tiene los m?s altos honores a traés de su promedio de raduaci;n (P5) implement main open core,stdio,math class acts - estudiante./ estudiante:(strin 0ombre, real Promedio) aprobacion:(strin 0ombre) class predicates estudiante4honor:(strin 0ombre)nondeterm an*low clauses estudiante4honor(0ombre):-estudiante(0ombre,P5), P5W6F,not(aprobacion(0ombre)) class predicates reconsult :(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,estudiante./), ile::consult(3ile0ame,estudiante./) clauses run(): console::init(), write("carar datosn"), reconsult("estudiantet#t"), write("n 8ue estudiante se raduo con honores n"), estudiante4honor(0ombre), write (0ombre), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
COMPRAR CON TARJETA >iempre piense dos eces al usar el predicado not El uso incorrecto producir? un mensa&e de error o errores en la l;ica de su prorama Ro siuiente es un e&emplo de la manera apropiada de usar el predicado not .etermina uien puede ir a comprar con la tar&eta de crédito implement main open core,stdio,math class acts - eis=<./ tiene4tar&eta4credito:(strin 0ombre, strin Aar&eta) sin4ondos:(strin 0ombre, strin Aar&eta)
class predicates usta4comprar:(strin 0ombre)nondeterm an*low clauses usta4comprar(2luien):-tiene4tar&eta4credito(2luien,Aar&eta), not(sin4ondos(2luien,Aar&eta)), write (2luien), write(" puede ir de compras con la tar&eta de credito: "), write (Aar&eta),write("n") class predicates reconsult :(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,eis=<./), ile::consult(3ile0ame,eis=<./) clauses run(): console::init(), write("carar datosn"), reconsult("eis=<t#t"), write("n 8VTE0 PVE.E T[ 2 CU@P[2[ n"), usta4comprar(2luien), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
POSEE UN GRUPO DE PERSONAS 2 continuaci;n el e&emplo ue muestra lo ue posee un rupo de personas implement main open core,stdio,math domains articulos 6 libro(titulo,autor) caballo(nombre) nombre6 s*mbol titulo6s*mbol autor6s*mbol class acts -propio./ propio:(nombre,articulos) class predicates reconsult :(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,propio./), ile::consult(3ile0ame,propio./) clauses run(): console::init(), write("carar datosn"), reconsult("duenot#t"),
write("n .e ué artGculos es dueIouan n"), +6"uan", propio(+, 2rticulos), write(+, " es dueIo de " , 2rticulos,"n"), ail run(): write("n in del testn") end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
PAISES Prorama paises demuestra c;mo usar el retroceso para realizar procesos repetit ios implement main open core,stdio,math class acts -paises./ pais:(s*mbol) class predicates imprimir:(s*mbol) nondeterm an*low clauses imprimir(1):-pais(+), write(+, "n"), ail class predicates reconsult :(strin 3ile0ame) clauses reconsult(3ile0ame):-retract2ll( 4,paises./), ile::consult(3ile0ame,paises./) clauses run(): console::init(), write("carar datosn"), reconsult("paisest#t"), write("n Tmprimir los paisesn"), imprimir(1), write(1,"n"), ail
run():write("n in del testn")
end implement main oal mainE#e::run(main::run)
$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
FACTORIAL El e&ercicio ue se indica a continuaci;n calcula el actorial de un nOmero
implement main open core,console,stdio,math class predicates act:(inteer, inteer) procedure (i, o) clauses classTno("acun", "'<") act(0,') :- 0J', ! act(0, 0%3') :- act(0-', 3') run(): console::init(), write("n inrese el nOmero del ue desea el actorialn"), act(read(), 3), write(3), nl, nl end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
IMPRIME NUMEROS NATURALES INTERMINABLE el contador empezar? a imprimir enteros ue e mpiezan en < de orma interminable implement main open core,stdio,math class predicates count:(real) clauses count(0):-write(SrS,0), 0ew0 6 0M', count(0ew0) run(): console::init(), write("n"), count(<) end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
FIBONACCI Utro e&emplo de recursi;n son los nOmeros de 3ibonacce implement main open core, console,stdio,math class predicates ibonacci:(inteer, inteer) procedure(i,o)
clauses classTno("ibonacci@od","'<") ibonacci(0,<):-06<,! ibonacci(0,'):-0J',! ibonacci(0,+):-ibonacci(0-',+'), ibonacci(0-=,+=),+ 6 +' M +=,!
run():console::init(), write("n inrese el numero del ue se desea el ibonaccin"), ibonacci(read(),3), write(3), nl, nl
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
IMPRIMIR LOS ELEMENTOS DE UNA LISTA implement main open core,stdio,math domains lista 6strin% class predicates escribir4una4lista:(lista) clauses escribir4una4lista(\]):-! escribir4una4lista(\Cabeza^Cola]):- write(Cabeza),write("n"), escribir4una4lista(Cola) clauses run(): console::init(), write("Tmpimir los elementos de la listan"), Rista6(\"+aier",">ilana","5ioanna"]), escribir4una4lista(Rista) end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
CONTAR ELEMENTOS DE LA LISTA implement main open core,stdio,math domains lista6s*mbol% class predicates lonitud4de:(lista,inteer) procedure (i,o) clauses lonitud4de(\],<):- !
lonitud4de(\ 4^A],R):- lonitud4de(A,RonitudCola), R6RonitudCola M ' clauses run(): console::init(), write("Tnrese Q elementosn"), write("n"), Rista6\"+aier",">ilana","5ioanna"], write(Rista), lonitud4de(Rista,R), write("n"), write(R) end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
MODIFICANDO LA LISTA Por e&emplo, auG tiene un prorama ue toma una lista de nOmeros * area ' a cada uno de los e lementos : implement main open core,stdio,math domains lista6inteer% class predicates adicionar':(lista,lista) procedure(i,o) clauses adicionar'(\],\]) adicionar'(\Cabeza^Cola],\Cabeza'^Cola']) :- Cabeza'6CabezaM', adicionar'(Cola,Cola') clauses run(): console::init(), write("n 2umenta en uno cada elemento de la lista oriinal dadan "), write("n Tnrese Q nmeros ue ormaran la lista n"), Rista6(\read(),read(),read(),read()]), write(Rista), write("n"), adicionar'(Rista,0ueaRista), write (0ueaRista) end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
COPIA NUMEROS POSITIVOS Y DEJA NEGATIVOS 2 continuaci;n un prorama ue e#amina una lista de nOmeros ue copia los nOmeros positios * omite los nOmeros neatios:
implement main open core,stdio,math domains
lista 6 inteer% class predicates descarta4neatios:(lista, lista) procedure (i,o) clauses descarta4neatios(\], \]) descarta4neatios(\H^A],ProcesandoCola):-H J <, $% >i H es neatio, simplemente saltar %$!,descarta4neatios(A, ProcesandoCola) descarta4neatios(\H^A],\H^ProcesandoCola]):-descarta4neatios(A, ProcesandoCola)
clauses run(): console::init(), Rista6 \=,-,Q], descarta4neatios(Rista, Rista0uea), write(Rista0uea) end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
LISTA EL NÚMERO DE MIEMBROS Y BUSQUEDA DE UN ELEMENTO EN UNA LISTA implement main open core,stdio,math domains nombrelista 6 strin% class predicates miembro:(strin 0ombre, nombrelista) nondeterm an*low clauses miembro(0ombre, \0ombre^ 4]) miembro(0ombre, \ 4^Cola]):-miembro(0ombre,Cola) clauses run():-console::init(), 0ombre6">ilana", Rista6 \"+aier",">ilana","5ioanna"], miembro(0ombre, Rista), write(0ombre), write(" es parte de la lista "), write(Rista), nl, ail
run():write("n3in del testn")
end implement main oal mainE#e::run(main::run)
$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
AÑADIR UNA LISTA A OTRA LISTA En este pr;#imo e&emplo usted construir? un predicado para aIadir una lista a otra Vsted deinir? el predica do aIadir con tres arumentos:
implement main open core,stdio,math domains listaenteros 6 inteer% class predicates aIadir:(listaenteros,listaenteros,listaenteros) procedure (i,i,o) clauses aIadir(\],Rista=,Rista=) aIadir(\H^R'],Rista=,\H^R]):-aIadir(R',Rista=,R) clauses run(): console::init(), Rista'6\', =, ], Rista=6\F, K], aIadir(Rista',Rista= , Rista), write(Rista) end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
SUMA LA LISTA DE LOS NÚMEROS DADOS implement main open core,stdio,math domains li6inteer% class predicates sumar:(li, nteer)procedure(i,o) clauses sumar(\],<):-! sumar(\+^R],0):-sumar(R,0'),06+M0' clauses run(): console::init(), write("Ra suma de la lista es:n"), R6\',Q,=,F], sumar(R,1), write(1) end implement main
oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
NUMEROS PARES .etermina los nOmeros ue son pares de la lista implement main open core,stdio,math domains inteer4list 6 inteer% class predicates elementos4pares:(inteer4list R',inteer4list =)procedure(i,o) escribir4lista:(inteer4list)
clauses elementos4pares(\],\]) elementos4pares(\H^A],R=):-[6 H mod =,[JW<,!, elementos4pares(A,R=) elementos4pares(\H^A],\H^R=]):-elementos4pares(A,R=) escribir4lista(\]) escribir4lista(\H^A]):-write(H),nl,escribir4lista(A) clauses run(): console::init(), write("Ros elementos pares de la lista son:n"), R'6\',=,,Q,F,K], elementos4pares(R',R=), escribir4lista(R=) end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
CUADRADO DE NUMEROS DE LISTA Ubtiene el cuadrado de los nOmeros de una lista implement main open core,stdio,math domains listaenteros6inteer% class predicates lista4cuadrados:(listaenteros R,listaenteros R')procedure(i,o) escribir4lista:(listaenteros) clauses lista4cuadrados(\],\]) lista4cuadrados(\H'^A'],\H=^A=]):-H=6H'%H', lista4cuadrados(A',A=) escribir4lista(\]) escribir4lista(\H^A]):-write(H),nl, escribir4lista(A)
clauses
run():console::init(), write("Ra lista de cuadrados es la siuiente:n"), R6\',=,], lista4cuadrados(R,R'), escribir4lista(R')
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
ROTACION DE LISTA [ealiza la rotaci;n de una lista implement main open core,stdio,math domains lista6s*mbol% class predicates aIadir:(lista R', lista R=,lista R)procedure(i,i,o) inersa:(lista R',lista R=)procedure(i,o) escribir4lista:(lista) clauses aIadirr(\],R=,R=) aIadir(\H^R'],Rista=,\H^R]):-aIadir(R',Rista=,R) inersa(\],\]) inersa(\+^R'],R=):-inersa(R',R), aIadir(R,\+],R=) escribir4lista(\]) escribir4lista(\H^A]):-write(H), write(" ")D,stdTU::nl, escribir4lista(A) clauses run(): console::init(), write("Ra lista inersa es la siuiente:n"), R6\"a","b","c"], inersa(R,R'), escribir4lista(R') end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
POSICIONDE UN ELEMENTO DE LISTA .ada una lista de elementos nos indica cual elemento se encuenatra en una posici;n indicada
implement main open core,stdio,math domains lista6inteer% class predicates
elemento4en:(inteer Pos,lista R, inteer 0)nondeterm an*low clauses elemento4en(',\+^ 4],+) elemento4en(,\ 4^R],+):-W','6-', elemento4en(',R,+) clauses run(): console::init(), Pos6Q, R6\',=,,Q,Y,N], write("nEl elemento de la lista ue esta en la posicion ",Pos," es:n"), elemento4en(Pos,R,+), write(+), nl, ail
run():write("n3in del testn")
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
AREA DEL CIRCULO DADO RADIO Calcula el ?rea de un circulo, dado su radio implement main open core, console,stdio,math class predicates area:(inteer,real) procedure(i,o) clauses area([adio, 2rea):-2rea 6 ([adio%[adio)%'Q
run():console::init(), write("n Tnrese el radio del circulon "), area(read(),[), write([), nl, nl
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
AREAS Y VOLUMENES Calcula el area * olumenes de iuras eométricas implement main open core,console,stdio,math class predicates areacubo:(inteer 2rista,inteer 2reacir) procedure(i,o)
clauses areacubo(2rista,2reacir):-2reacir6K%2rista%2rista class predicates olumencubo:(inteer 2rista,inteer Xolc) procedure(i,o) clauses olumencubo(2rista,Xolc):-Xolc62rista%2rista%2rista class predicates areaprisma:(inteer 2l,inteer 2b,inteer 2reap) procedure(i,i,o) clauses areaprisma(2l,2b,2reap):-2reap62lM(=%(2b)) class predicates olumenprisma:(inteer 2b,inteer 2a,inteer Xolp) procedure(i,i,o) clauses olumenprisma(2b,2a,Xolp):-Xolp62b%2a class predicates areapiramide:(inteer 2ll,inteer 2b,inteer 2reapir) procedure(i,i,o) clauses areapiramide(2l,2b,2reapir):-2reapir62lM2b class predicates olumenpiramide:(inteer 2b,inteer 2,real Xolpir) procedure(i,i,o) clauses olumenpiramide(2b,2,Xolpir):-Xolpir6(2b%2)$ clauses run(): console::init(), write("2reas * Xolumenesn"), write("nnTnrese los datos, despues de los datos pulse enternn"), write("n2rea del Cubon"), write("Tnrese la 2ristan"), areacubo(read(),2reac), write("El area del cubo es: "), write(2reac), nl, write("nXolumen del Cubon"), write("Tnrese la 2ristan"), olumencubo(read(),Xolcu), write("nEl olumen del cubo es: "), write(Xolcu), nl, write("n2rea del Prisman"), write("Tnrese el altura del lado * de la basen"), areaprisma(read(),read(),2reapris), write("nEl area del prisma es: "), write(2reapris), nl, write("nXolumen del Prisman"), write("Tnrese al area de la base * la alturan"),
olumenprisma(read(),read(),Xolpris), write("nEl olumen del prisma es"), write(Xolpris), nl, write("n2reas de la Piramiden"), write("Tnrese la 2ltura del lado * la altura de la basen"), areapiramide(read(),read(),2reapir), write("nEl area de la piramide es: "), write(2reapir), nl, write("nXolumen de la Piramiden"), write("Tnrese area de la base * la 2lturan"), olumenprisma(read(),read(),Xolpir), write("nEl olumen de la piramide es: "), write(Xolpir),nl
end implement main oal mainE#e::run(main::run) $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
ECUACIONES CUADRATICAS 2 continuaci;n se tiene un prorama ue resuele las ecuaciones cuadr?ticas
implement main open core,stdio,math class predicates #':(inteer 2,inteer /,inteer C,real +i)procedure (i,i,i,o) clauses #'(2,/,C,+i):-+i6((<-/)M(math::srt((/%/)-Q%2%C)))$(=%2) class predicates #=:(inteer 2,inteer /,inteer C,real +i)procedure (i,i,i,o) clauses #=(2,/,C,+i):-+i6((<-/)-(math::srt((/%/)-Q%2%C)))$(=%2)
clauses run(): console::init(), write("nnRas [aices para la ecuaci;nb cuadrtica (=+_=) - '=+ M Qnn"), #'(=,-'=,Q,+'), write("+' es: "), write(+'),stdTU::nl, #=(=,-'=,Q,+=), write("+= es: "), write(+=), nl end implement main oal mainE#e::run(main::run)
$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$
MI FAMILIA $%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Cop*riht ` %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%$ implement main open core constants class0ame 6 "main" classXersion 6 "" clauses classTno(class0ame, classXersion)
class acts -miamilia padre:(strin 0ombrePadre, strin 0ombrehi&o)
class predicates hermano:(strin +, strin 1) nondeterm an*low clauses Del and es "," lado derecho tiene estar en la base de conocimiento hermano(+,1): padre(,+), padre(,1), +JW1 class predicates tio:(strin +,strin X) nondeterm an*low clauses tio(+,X):
hermano(+,1), padre(+,B), padre(1,X), BJWX
class predicates abuelos:(strin 2buelo, strin 0ieto) nondeterm an*low clauses abuelos(2buelo,0ieto): padre(2buelo,1), padre(1,0ieto), 2bueloJW0ieto
class predicates reconsult:(strin 2rchio)