Manual Visual Prolog 7.5
Julio Luis Tenorio Cabrera.
Manual Visual Prolog 7.5
INDICE
........................................................... ........................................ ....................................... ....................................... ................................... ............... 1 INDICE....................................... .......................................................... ....................................... ........................................ ....................................... ..................... 2 MODO CONSOLA....................................... ......................................................... ....................................... ........................................ ....................................... ............................... ............ 2 SESIÓN 01...................................... .......................................................... ....................................... ....................................... ........................ .... 2 Figura 01: Ícono de Visual Prolog ......................................
Figura 0: Pan!alla inicial de Visual Visual Prolog .........................................................................................3 Figura 0": Pan!alla de da!os del #ro$ec!o del e%ercicio 01 .......................................................................4 Figura 0&: Pan!alla de es!ruc!ura del #ro$ec!o del e%ercicio 01 ..................................................................5 Figura 0': Pan!alla (isuali)aci*n de resul!ado de la e%ecuci*n del #ro$ec!o del e%ercicio 01 ..............................9 SESIÓN 0...................................... ......................................................... ....................................... ........................................ .................................... ............................. ............. 14 ......................................................... ....................................... ........................................ .................................... ............................. ............. 23 SESIÓN 0"......................................
SESIÓN 0&...................................... ......................................................... ....................................... ........................................ .................................... ............................. ............. 30 MODO +,I....................................... ........................................................... ........................................ ........................................ ................................... .......................... ........... 35 SESIÓN 0'...................................... ......................................................... ....................................... ........................................ .................................... ............................. ............. 35
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 1
Manual Visual Prolog 7.5
MODO CONSOLA SESIÓN 01 λ
Visual Prolog- es un en!orno de desarrollo #ara Sis!e.as E/#er!os- asado en la #rogra.aci*n l*gica u!ili)ando asi.is.o el .ecanis.o de ra)ona.ien!o con encadena.ien!o acia a!r2s #ara reali)ar el #roceso de ra)ona.ien!o3
λ
En Visual Prolog- no es necesario #rogra.ar el #roceso de ra)ona.ien!o $a 4ue- c*.o se .encion* an!erior.en!e- $a se encuen!ra i.#le.en!ado- #or lo 4ue s*lo se le dee de ali.en!ar de la e/#erienciae/#eriencia- es decir del conoci.ien!o conoci.ien!o del e/#er!o o es#ecialis!a es#ecialis!a u.ano- #ara la cons!rucci*n cons!rucci*n de la 5ase de Conoci.ien!o del Sis!e.a E/#er!o 4ue se (a$a a desarrollar3
λ
Visual Prolog- #er.i!e el desarrollo de a#licaciones !an!o a ni(el consola co.o a#licaciones de !i#o +,I3 Para el #resen!e .anual- e.#e)are.os e.#e)are.os e/#licando el desarrollo desarrollo de a#licaciones a#licaciones a ni(el consola $ luego con las a#licaciones !i#o +,I3
λ
Para el ingreso a Visual Prolog- ace.os dole clic6 sore el 7cono res#ec!i(o- el 4ue se .ues!ra a con!inuaci*n:
Figura 01: Ícono de Visual Prolog λ
Luego oser(are.os la siguien!e in!er8a)- en la 4ue #ode.os crear un nue(o #ro$ec!o- arir un #ro$ec!o de la lis!a de #ro$ec!os 4ue se .ues!ren en dica in!er8a) o uscar a$uda en la 9i6i de Visual Prolog !!#:;;9i6i3(isual<#rolog3co.;inde/3##=!i!le>+e!!ing?0S!ar!ed !!#:;;9i6i3(isual<#rolog3co.;inde/3##=!i!le>+e!!ing?0S!ar!ed@3 @3 La in!er8a) 4ue se .ues!ra es:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 2
Manual Visual Prolog 7.5
Figura 0: Pan!alla inicial de Visual Prolog λ
Para la creaci*n de un nue(o #ro$ec!o E"ercicio 01@ lla.ado #$ola Mundo% #or el .o.en!o de !i#o consola@- se ace clic6 en el o!*n Ne& Pro"ec!% $ en la in!er8a) 4ue a#arece se escrien los da!os necesario #ara el #ro$ec!o- !al co.o se .ues!ra a con!inuaci*n: no ol(idar 4ue el !i#o de #ro$ec!o Pro"ec! 'ind% es Console A((lica!ion%@
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 3
Manual Visual Prolog 7.5
Figura 0): Pan!alla de da!os del (ro*ec!o del e"ercicio 01 λ
Luego Luego de aer regis! regis!rad radoo los da!os res#ec!i res#ec!i(os(os- se ace clic6 clic6 en el o!*n o!*n Finis+ con lo 4ue a#arecer2 la siguien!e in!er8a) $ a la (e) Visual Prolog co.#ilar2 #or de8ec!o la a#licaci*n 4ue se es!2 es!2 desarr desarrol olla land ndoo- .os! .os!r2n r2ndo dose se en la (en! (en!an anaa #Messages% el #roce #roceso so de co.# co.#il ilac aci* i*nn $ 8inal.en!e 8inal.en!e .os!r2ndose el .ensa%e .ensa%e #Pro"ec! +as ,een ,uil!% es decir 4ue el #Pro*ec!o #Pro*ec!o +a sido
cons!ruido%:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 4
Manual Visual Prolog 7.5
Figura 0-: Pan!alla de es!ruc!ura del (ro*ec!o del e"ercicio 01 λ
En es!e #un!o es i.#or!an!e e/#licar el con!enido de la (en!ana del #ro$ec!o en donde se oser(an dos car#e!as car#e!as-- una 4ue lle(a el no.re no.re del #ro$ec!o#ro$ec!o- en es!e es!e caso caso #$ola Mundo% $ la o!ra .
/ProDir3 La car#e!a #$ola Mundo% con!iene los arci(os del #ro$ec!o 4ue se deen de !raa%ar #or #ar!e del desarrollador d esarrollador del #ro$ec!o#r o$ec!o- co.o co .o #or #o r e%e.#lo los arci(os: #$ola Mundo2i((r"%-
#3aincl%- #3ain3ani4es!%- #3ain(ac5%- #3ain(+%- #3ain(ro%- e!c3- $ la car#e!a . /ProDir con!iene dos car#e!as: #li,% $ #(4c% 4ue con!ienen las lirer7as a ser u!ili)adas en el #ro$ec!o3 Por e%e.#lo el arci(o 3ain(ac56 se relaciona con la car#e!a #(4c% 4ue es!2 den!ro de la car# car#e! e!aa #./ProDir%- $a 4ue inclu$ inclu$ee a algun algunos os #a4ue #a4ue!e !ess $ arci arci(o (oss 4ue la car#e car#e!a !a #(4c% con! con!ie iene ne33 Asi.i si.is. s.oo el arc arci( i(oo #3ai !a.iB iBnn con! con!ie iene ne al arc arci( i(oo #3ain(+% $ #3ain n(a (ac5 c5%% !a.
#3ain(ro% Es!o se .ues!ra a con!inuaci*n:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 5
Manual Visual Prolog 7.5
#include @"main.ph" % privately used packages #include @"pfc\console\console.ph" #include @"pfc\core.ph" % private interfaces % private classes % implementations #include @"main.pro"
λ
Asi.is.o Asi.is.o #or e%e.#lo- el arci(o 3ain(+- rre4uier e4uieree al arci(o 3ain(ac5 e e inclu$e inclu$e !a.iBn al arci arci(o (o #core car#e!aa #(4c% $ al arci arci(o (o 3aincl3 Se dee acer .enci*n 4ue el #core(ro (ro%% de la car#e! arci(o #core(ro%- es 8unda.en!al 8unda.en!al $a 4ue con!iene con!iene !odos los #redicados #redicados #ara el 8unciona.ien!o 8unciona.ien!o de un #rogra.a #or e%e.#lo- la de8inici*n de los !i#os de da!os3 Es!o se .ues!ra a con!inuaci*n: #requires @"main.pack" % publicly used packages #include @"pfc\core.ph" % exported interfaces % exported classes #include @"main.cl"
λ
El arci(o 3aincl- con!iene la declaraci*n del #redicado run- el 4ue se (a a de8inir en 3ain(ro Es!o se .ues!ra a con!inuaci*n: class main class main open core open core predicates run : core:: core::runnable runnable.. end class class main main
λ
El arc arcii(o 3ain3ani4es! con! con!ie iene ne el c7digo del #ro$ #ro$ec ec!o !o !al !al co.o co.o se .ues .ues!r !raa a c7digo 8ML del con!inuaci*n:
!xml ! xml version version ".$" encoding encoding "utf&" standalone standalone "yes" "yes"!' !' assembly xmlns xmlns "urn:schemasmicrosoftcom:asm.v" manifest(ersion manifest(ersion ".$" ".$"' ' assembly)dentity name name "*ola +undo" version version ".$.$.$"
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 6
Manual Visual Prolog 7.5
processor,rchitecture processor,rchitecture "-&" type type "/in01" 2' trust)nfo xmlns xmlns "urn:schemasmicrosoftcom:asm.v0" "urn:schemasmicrosoftcom:asm.v0"' ' security' requested3rivileges' requested4xecution5evel level level "as)nvoker" ui,ccess ui,ccess "false" 2' 2' 2requested3rivileges' 2security' 2trust)nfo' dependency' dependent,ssembly' assembly)dentity name name "+icrosoft.6indo/s.7ommon7ontrols" version version ".$.$.$" processor,rchitecture processor,rchitecture "-&" type type "/in01" public8ey9oken public8ey9oken ";b<<
λ
El arci(o #console(ro%- 4ue es!2 uicado en la car#e!a #console% de la car#e!a #(4c%- con!iene #or e%e.#lo e%e .#lo al #redicado #&ri!e%3 Es!o se #uede (eri8icar (eri8icar (isuali)ando (isuali)ando el arci(o #consola(ro%desde el Visual Prolog3
λ
AoraAora- con!inu con!inuando ando con el desarrol desarrollo lo del #rogra.a #rogra.a #$ola Mundo%- se #rocede a escriir el c*digo res#ec!i(o en el arci(o #3ain(ro%- $a 4ue es el arci(o 4ue con!iene el c*digo 8uen!e #rinci#al de la a#licaci*n cuando se !raa%a !ra a%a en .odo consola3 co nsola3 En!onces se ace ac e dole do le clic6 sore el arci(o #3ain(ro% con lo 4ue se .ues!ra el siguien!e c*digo:
implement main implement main open core open core clauses run>? run >? :
succeed. succeed. % place your o/n code here
end implement implement main main
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 7
Manual Visual Prolog 7.5
goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
Aora se #rocede a co.#le!ar el c*digo #or de8ec!o !al co.o se .ues!ra a con!inuaci*n: implement main implement main open core open core clauses run>? run >? : console:: console::/rite /rite>>"*ola +undo..."?A +undo..."?A B B console:: console::read7har read7har>?. >?. end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
O!ra (ersi*n del #rogra.a #$ola Mundo%- 4ue es la 4ue usare.os de aora en adelan!e en el #resen!e .anual- es la 4ue se .ues!ra a con!inuaci*n: implement main implement main open core open coreAAconsole clauses run>? run >? :
/rite> /rite>"*ola +undo..."?A +undo..."?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Lo 4ue sucede sucede es 4ue 4ue se a incl inclui uido do la car#e car#e!a !a #consol #console% e% de la car#e!a (4c% $a e/#licada an!erior.en!e- con lo 4ue $a no es necesario es!ar escriiendo la #alara #console% cuando se use el #redicado #&ri!e% o el #redicado #readC+ar%3 Aora- #ara e%ecu!ar la a#licaci*n $ oser(ar los resul!ados- se ace clic6 en la o#ci*n #9uild%- luego en la suo#ci*n #9uild%- con lo 4ue si no e/is!en incon(enien!es- Visual Prolog en(iar2 el .ensa%e: #Pro"ec! +as ,een ,uil!% $ luego se selecciona la suo#ci*n #Eecu!e% u,icada en la o(ci7n del 3en; (rinci(al: #9uild%- con lo 4ue se .os!rar2 el resul!ado de la e%ecuci*n de la a#licaci*n #$ola Mundo%- !al co.o se .ues!ra a con!inuaci*n:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 8
Manual Visual Prolog 7.5
Figura 0<: Pan!alla 2isuali=aci7n de resul!ado de la e"ecuci7n del (ro*ec!o del e"ercicio 01 Luego #ara !er.inar la e%ecuci*n de la a#licaci*n se #resiona la !ecla #En!er%3
E"ercicio 0: Desarrollar una a#licaci*n 4ue solici!e un no.re $ le en(7e un saludo incluido el no.re ingresado3
Soluci7n: Se .ues!ra el c*digo de #3ain(ro%: implement main implement main open core open coreAA console clauses run>? run >? :
/rite> /rite>")ngrese su nombre por favor:"?A favor:"?A ser ser read5ine>?A read5ine>?A
/rite> /rite>"Cienvenido "A "Aser serAA" presiona por favor una tecla para continuar..."?A continuar..." ?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 9
Manual Visual Prolog 7.5
E"ercicio 0): Desarrollar una a#licaci*n 4ue .ues!re la ca#i!al de un De#ar!a.en!o3 Soluci7n: En la soluci*n del #resen!e #rogra.a se u!ili)ar2 la 2aria,le an7ni3a o ,lanca o no ligada- 4ue se re#resen!a con el guion a%o o underscore /> el cu2l se u!ili)a #ara ignorar el (alor 4ue se ca#!ure con el #redicado readC+ar/- $a 4ue #ara el caso #resen!e no es de in!erBs3 Asi.is. Asi.is.oo se u!ili)a u!ili)a el #redicado cor!e /? el 4ue e(i!ar2 4ue el .o!or de in8erencia de Visual Prolog e%ecu!e la o!ra o!ra i.#le. i.#le.en! en!aci aci*n *n del #redica #redicado do #run #run%% $a 4ue Bs!e se deer7a e%ecu!ar cuando la #ri.era i.#le.en!aci*n de #run% 8alle3 Se .ues!ra el c*digo de #3ain(ro%:
implement main implement main open core open coreAA console class facts capital : >stringA stringAstring?. string?. clauses capital> capital>"5a 5ibertad"A 5ibertad"A"9ruDillo" "9ruDillo"?. ?. run>? run >? :
/rite> /rite>", continuaciEn mostrarF la capital de un GepartamentoA por favor presione una tecla para continuar.. continuar..." ."?A ?A B B read7har>?A read7har>?A
capital> capital>-AH?A
/rite> /rite>"5a capital de "A "A-A" es: "A "AH?A B B read7har>?A read7har>?A I. run>?. run >?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 10
Manual Visual Prolog 7.5
E"ercicio 0-: Desarrollar una a#licaci*n 4ue .ues!re la ca#i!al de un De#ar!a.en!o el 4ue ser2 ingresada #or !eclado- $ en el caso 4ue no se cono)ca la ca#i!al- se dee en(iar un .ensa%e al usuario3
Soluci7n: Se .ues!ra el c*digo de #3ain(ro%:
implement main implement main open core open coreAAconsole class facts capital : >stringA stringAstring?. string?. clauses capital> capital>"5a 5ibertad"A 5ibertad"A"9ruDillo" "9ruDillo"?. ?. capital> capital>"5ambayeque" "5ambayeque"AA"7hiclayo" "7hiclayo"?. ?. capital> capital>"5ima" "5ima"AA"5ima" "5ima"?. ?. capital> capital>"3iura" "3iura"AA"3iura" "3iura"?. ?. run>? run >? :
/rite> /rite>", continuaciEn mostrarF cuJl es la capital de un GepartamentoA ingrese el nombre del Gepartamento:" Gepartamento:"?A ?A Gpto Gpto read5ine>?A read5ine>?A
capital> capital>Gpto GptoAA7api 7api?A ?A
/rite> /rite>"5a capital de "A "AGpto GptoAA" es: "A "A7api 7api?A ?A B B read7har>?A read7har>?A I. run>?: run >?:
/rite> /rite>"5o siento no conoKco la capital para el Gepartamento ingresado..." ingresado..."?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
E"ercicio 0<: Desarrollar una a#licaci*n 4ue .ues!re la ca#i!al de un De#ar!a.en!o el 4ue ser2 ingresada #or !eclado- $ en el caso 4ue no se cono)ca la ca#i!al- se dee en(iar un .ensa%e al usuario con!eniendo el no.re del De#ar!a.en!o3 Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 11
Manual Visual Prolog 7.5
Soluci7n: Se .ues!ra el c*digo de #3ain(ro%:
implement main implement main open core open coreAAconsole class predicates buscaBcapital : >string?. string?. class facts capital : >stringA stringAstring?. string?. clauses capital> capital>"5a 5ibertad"A 5ibertad"A"9ruDillo" "9ruDillo"?. ?. capital> capital>"5ambayeque" "5ambayeque"AA"7hiclayo" "7hiclayo"?. ?. capital> capital>"5ima" "5ima"AA"5ima" "5ima"?. ?. capital> capital>"3iura" "3iura"AA"3iura" "3iura"?. ?. run>? run >? :
/rite> /rite>", continuaciEn mostrarF cuJl es la capital de un GepartamentoA ingrese el nombre del Gepartamento:" Gepartamento:"?A ?A Gpto Gpto read5ine>?A read5ine>?A
buscaBcapital> buscaBcapital>Gpto Gpto?. ?.
buscaBcapital> buscaBcapital>Gpto Gpto?: ?:
capital> capital>Gpto GptoAA7api 7api?A ?A
/rite> /rite>"5a capital de "A "AGpto GptoAA" es: "A "A7api 7api?A ?A B B read7har>?A read7har>?A I.
buscaBcapital> buscaBcapital>Gpto Gpto?: ?:
/rite> /rite>"5o siento no conoKco la capital para el Gepartamento "A "AGpto Gpto?A ?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 12
Manual Visual Prolog 7.5
SESIÓN 0 λ
El #redicado 4ail conocido co.o el #redicado o#ues!o al #redicado cor!e ?- 8uer)a a 4ue Visu Visual al Prolo Prologg e%ec e%ecu! u!ee el ,ac5!rac5ing- es decir- ace 4ue Visual Prolog e%ecu!e !odas las i.#le.en!aciones de una regla de conoci.ien!o3 A con!inuaci*n se .ues!ra un e%e.#lo en el e%ercicio 03 Desarrollar una a#licaci*n a#licaci*n 4ue .ues!re .ues!re las ca#i!ales de un n.ero de!er.inado de!er.inado de E"ercicio 0@: Desarrollar #a7ses- .os!rando un .ensa%e de cul.inaci*n cuando $a no encuen!re .2s #a7ses en la 5ase de Conoci.ien!o3
Soluci7n: Se .ues!ra el c*digo en 3ain(ro: implement main implement main open core open coreAAconsole class facts capital : >stringA stringAstring?. string?. clauses capital> capital>"3erL" "3erL"AA"5ima" "5ima"?. ?. capital> capital>"7hile" "7hile"AA"Mantiago de 7hile"?. 7hile"?. capital> capital>"Colivia" "Colivia"AA"5a 3aK"?. 3aK"?. capital> capital>"4cuador" "4cuador"AA"Nuito" "Nuito"?. ?. run>? run >? :
/rite> /rite>", continuaciEn mostrarF las capitales de los paOses registrados en la Case de 7onocimiento" 7onocimiento"?A ?A nlA nlA
capital> capital>3A7?A
/rite> /rite>"5a capital de "A "A3A" es "A "A7?A nlA nlA
fail. fail. run>?: run >?:
/rite> /rite>"4s todo lo que tengo registrado en la Case de 7onocimiento"?A 7onocimiento"?A B B read7har>?. read7har>?.
end implement implement main main
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 13
Manual Visual Prolog 7.5
goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
El #redicado nonde!er3 .odi8ica la na!urale)a na!urale)a de!er.in7s!ica de!er.in7s!ica 4ue #or de8ec!o #osee una regla de conoci.ien!o- es decir- cuando se declara una regla de conoci.ien!o- sie.#re Visual Prologes#era 4ue se cons!ru$a #or lo .enos dos i.#le.en!aciones de la regla de conoci.ien!o $a 4ue si una de ellas 8alla se e%ecu!a la siguien!e i.#le.en!aci*n de la regla3 En!onces cuando no se desea cons!ruir o!ra i.#le.en!aci*n de una regla de conoci.ien!o- se u!ili)a el #redicado nonde!er3 cuando se declara la regla3 Es!o se .ues!ra en el siguien!e e%e.#lo3 Desarrollar una a#licaci*n a#licaci*n 4ue .ues!re .ues!re las ca#i!ales de un n.ero de!er.inado de!er.inado de E"ercicio 0: Desarrollar ciudades- .os!rando un .ensa%e de cul.inaci*n cuando $a no encuen!re .2s ciudades en la 5ase de Conoci.ien!o3
Soluci7n: Se .ues!ra el c*digo en 3ain(ro:
implement main implement main open core open coreAAconsole class predicates buscaBcapital : >? nondeterm nondeterm.. class facts capital : >stringA stringAstring?. string?. clauses capital> capital>"5a 5ibertad"A 5ibertad"A"9ruDillo" "9ruDillo"?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 14
Manual Visual Prolog 7.5
capital> capital>"5ambayeque" "5ambayeque"AA"7hiclayo" "7hiclayo"?. ?. capital> capital>"5ima" "5ima"AA"5ima" "5ima"?. ?. capital> capital>"3iura" "3iura"AA"3iura" "3iura"?. ?. buscaBcapital>?: buscaBcapital>?:
capital> capital>Gpto GptoAA7api 7api?A ?A
/rite> /rite>"5a capital de "A "AGpto GptoAA" es: "A "A7api 7api?A ?A nl. nl. run>? run >? :
buscaBcapital>?A buscaBcapital>?A
fail. fail. run>?: run >?:
/rite> /rite>"4so es todo lo que tengo en la Case de 7onocimiento"?A 7onocimiento"?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
El #redicado #redicado #an*4lo&%- se u!ili)a cuando se (a en una regla de conoci.ien!o no (as a e/is!ir res!ricciones en los !i#os de argu.en!os de la .is.a- es decir- los argu.en!os #ueden es!ar o no ligados a un (alor #or de8ec!o o #or algn asignaci*n #ar!icular3 Es!o se .ues!ra en el siguien!e e%e.#lo3
E"ercicio 0B: Desarrollar una a#licaci*n 4ue .ues!re los lugares 4ue le agrada (isi!ar a un es#oso sie.#re $ cuando es!os lugares sean del agrado de su es#osa3
Soluci7n: Se .ues!ra el c*digo en 3ain(ro: implement main implement main open core open coreAAconsole class predicates leBgustaBalBesposo : >stringA stringAstring? string? nondeterm anyflo/ anyflo/.. class facts leBgustaBaBlaBesposa : >stringA stringAstring?. string?. clauses leBgustaBaBlaBesposa> leBgustaBaBlaBesposa>"5ucy" "5ucy"AA"7ine" "7ine"?. ?. leBgustaBaBlaBesposa> leBgustaBaBlaBesposa>"5ucy" "5ucy"AA"Giscoteca" "Giscoteca"?. ?. leBgustaBaBlaBesposa> leBgustaBaBlaBesposa>")sabel" ")sabel"AA"3layas" "3layas"?. ?. leBgustaBalBesposo> leBgustaBalBesposo>4sposo 4sposoAA5ugar 5ugar?: ?:
leBgustaBaBlaBesposa>4sposa leBgustaBaBlaBesposa> 4sposaAA5ugar 5ugar?A ?A
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 15
Manual Visual Prolog 7.5
nl. nl. run>? run >? :
leBgustaBalBesposo> leBgustaBalBesposo>"5uis" "5uis"AA5ugar 5ugar?A ?A
/rite> /rite>", 5uis le gusta "A "A5ugar 5ugar?A ?A
fail. fail. run>?: run >?: nlA nlA
/rite> /rite>"4so es todo lo que le gusta al esposo"?A esposo"?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
Con res#ec!o res#ec!o al e%ercic e%ercicio io 0- dee aclarars aclararsee 4ue el #redica #redicado do #an*4lo&% dee u!ili)arse con .uco cuidado- claro es!o de#ende de las condiciones del #role.a- $a 4ue #odr7a .os!rar en los resul!ados alguna incoerencia co.o la .os!rada en el e%ercicio en .enci*n3 .enci*n3
λ
,no de los !i#os de da!os 4ue o8rece Visual Prolog- es #s!ring>lis!%- el cual se carac!eri)a #or #er.i!ir el .ane%o de los cl2sicos arreglos- en es!e caso de carac!eres3 A con!inuaci*n el siguien!e
E"ercicio 0 .ues!ra la a#licaci*n de es!e !i#o de da!o3 E"ercicio 0:
implement main implement main open core open coreAAconsole class facts
soyunstringlist : >stringBlist?. stringBlist?.
clauses
soyunstringlist>P soyunstringlist>P"algo$" "algo$"AA"algo$1" "algo$1"Q?. Q?.
soyunstringlist>P soyunstringlist>P"algo$0" "algo$0"Q?. Q?. run>? : run>?
soyunstringlist> soyunstringlist>9ipoMtring 9ipoMtring?A ?A /rite> /rite>9ipoMtring 9ipoMtring?A ?A nlA nlA
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 16
Manual Visual Prolog 7.5
λ
As7 !a.iBn Visual Prolog- o8rece o!ro !i#o de da!os 4ue es #unsigned%- el cual se carac!eri)a #or sola.en!e #er.i!ir da!os de !i#o en!ero #osi!i(o inclu$endo el cero@3 A con!inuaci*n el E"ercicio
10 .ues!ra la a#licaci*n de es!e !i#o de da!o3 E"ercicio 10: implement main implement main open core open coreAAconsole class facts soyununsigned : >unsigned?. clauses soyununsigned>?. soyununsigned>$?. run>? run >? : soyununsigned>9iponsigned?A /rite>9iponsigned?A nlA nlA
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
As7 As7 !a. !a.iB iBnn se #ued #uedee u!il u!ilii)ar )ar o!ro o!ro !i#o de da! da!o 4u 4uee o8re o8rece ce Visual sual Prol Prolog og-- co. co.o es cual se usa igua iguall 4ue 4ue #s!ring>lis!%- #ero con n.eros en!eros #osi!i(os #unsigned>lis!%- el cual inclu$endo el cero3
λ
Por o!ro lado Visual Prolog o8rece los o!ros !i#os de da!os cl2sicos 4ue o!ros lengua%es o8recen co.o in!eger- real- c+ar- e!c3- #ara cada uno de los cuales #er.i!e i.#le.en!ar !a.iBn lis!as- es decir #or e%e.#lo: in!eger>lis!- real>lis!- c+ar>lis!- e!c3
λ
Visual Prolog o8rece la con(ersi*n de !i#os de da!os en!re s7- #or e%e.#lo #ara con(er!ir el #roceso de con(er!ir el s!ring 0 a n.ero se oser(a el E%ercicio 11 $ #ara con(er!ir de n.ero a s!ring se oser(a el E%ercicio 13
E"ercicio 11: implement main implement main open core open coreAAconsole clauses run>? run >? :
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 17
Manual Visual Prolog 7.5
(alorMtring"1$" (alorMtring "1$"AA (alorRumero (alorRumero to9erm> to9erm>(alorMtring (alorMtring?? S $A /rite> /rite>"4n nLmero es:"A es:"A (alorRumero (alorRumero?A ?A fail. fail. run>?: run >?: B B read7har>?. read7har>?. end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
E"ercicio 1: implement main implement main open core open coreAAconsole clauses run>? run >? : (alorRumero (alorRumero 1$ 1$AA (alorMtring (alorMtring toMtring> toMtring>(alorRumero (alorRumero?A ?A
/rite> /rite>"4n Mtring es:"A es:"A (alorMtring (alorMtring?A ?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
Visual Prolog- o8rece !a.iBn #redicados #ara el .ane%o de cadenas- !al co.o lo .ues!ra el E%ercicio 1"3
E"ercicio 1): implement main implement main open core open coreAAconsole clauses run>? run >? :
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 18
Manual Visual Prolog 7.5
7adena 7adena "5uis 9enorio"A 9enorio"A 3artede7adena 3artede7adena string:: string::sub7har sub7har>>7adena 7adenaA?A A?A
/rite> /rite>"4l caracter estraOdo es:"A es:"A 3artede7adena 3artede7adena?A ?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
Visual Prolog- den!ro de la es!ruc!ura de un #rogra.a #er.i!e el uso de la secci*n: do3ains- es!a secci*n #er.i!e declarar los !i#os de argu.en!os 4ue se u!ili)ar2n en un eco o regla de conoci.ien!o3 El E%ercicio 1& .ues!ra el uso de do3ains
E"ercicio 1-: implement main implement main open core open coreAAconsole domains nombre string. string. class facts persona : >nombre?. nombre?. clauses persona> persona>"5uis" "5uis"?. ?. persona> persona>")sabel" ")sabel"?. ?. run>? run >? :
persona> persona>Rombre Rombre?A ?A
/rite> /rite>"3ersonas registrada:"A registrada:"A Rombre Rombre?A ?A nlA nlA
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
,n o%e!o do.inio- #uede ser declarado declarado #ara 4ue asu.a .2s de un (alor en .o.en!os dis!in!os3 dis!in!os3 El E%ercicio 1' .ues!ra lo .encionado:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 19
Manual Visual Prolog 7.5
E"ercicio 1<: implement main implement main open core open coreAAconsole domains cargo operativoT operativoTadministrativoT administrativoTgerencial. gerencial. class facts
labora : >stringA stringAcargo?. cargo?.
clauses labora> labora>"Uorge" "Uorge"AAoperativo?. operativo?. labora> labora>"+anuel" "+anuel"AAadministrativo?. administrativo?. labora> labora>"7arla" "7arla"AAgerencial?. gerencial?. run>? run >? :
labora> labora>7olaborador 7olaboradorAA7argo 7argo?A ?A
/rite> /rite>7olaborador 7olaboradorAA" ocupa un cargo "A " A7argo 7argo?A ?A nlA nlA
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 20
Manual Visual Prolog 7.5
SESIÓN 0) λ
En Visual Prolog- es #osile asignar (arios !i#os de do.inios a un argu.en!o de un #redicado3 Es!o se oser(a en el E%ercicio 13
E"ercicio 1@: implement main implement main open core open coreAAconsole domains datos nombre> nombre>string? string? T apellidos> apellidos>string? string? T edad> edad>integer?. integer?. class facts persona : >datos?. datos?. clauses persona> persona>nombre> nombre>"5uis" "5uis"??. ??. persona> persona>apellidos> apellidos>"9enorio" "9enorio"??. ??. persona> persona>edad> edad>&0 &0??. ??. run>? run >? :
persona> persona>nombre> nombre>R??A
persona> persona>apellidos> apellidos>,??A
persona> persona>edad> edad>4??A
/rite> /rite>"5os datos son:"?A son:"?A nlA nlA
/rite> /rite>"Rombre: "A "AR?A nlA nlA
/rite> /rite>",pelliidos: "A "A,?A nlA nlA
/rite> /rite>"4dad: "A "A4?A nlA nlA
fail. fail. run>?: run >?:
/rite> /rite>"4s todo lo que puedo mostrar..."?A mostrar..." ?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
En Visual Prolog- es #osile asignar a un #redicado (arios !i#os de do.inio asignado a un solo o%e!o de !i#o do.inio3 Es!o se oser(a en el E%ercicio 1G3
E"ercicio 1: implement main implement main open core open coreAAconsole
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 21
Manual Visual Prolog 7.5
domains datos nombre> nombre>string? string? T apellidos> apellidos>string? string? T edad> edad>integer?. integer?. class facts persona : >datosA datosAdatosA datosAdatos?. datos?. clauses persona> persona>nombre> nombre>"5uis" "5uis"?A ?Anombre nombre>>"Vafael" "Vafael"?A ?Anombre nombre>>",lfredo" ",lfredo"??. ??. persona> persona>apellidos> apellidos>"9enorio" "9enorio"?A ?Aapellidos apellidos>>"5oKada" "5oKada"?A ?Aapellidos apellidos>>"7abrera" "7abrera"??. ??. persona> persona>edad> edad>&0 &0?A ?Aedad edad>>;$ ;$?A ?Aedad edad>>< <??. ??. run>? run >? :
persona> persona>nombre> nombre>R?A ?Anombre nombre>>+?A ?Anombre nombre>>W??A
persona> persona>apellidos> apellidos>,?A ?Aapellidos apellidos>>C?A ?Aapellidos apellidos>>7??A
persona> persona>edad> edad>4?A ?Aedad edad>>X?A ?Aedad edad>>Y??A
/rite> /rite>"5os RW+CV4M son:"A son:"ARA" "A "A+A" "A "AW?A ?Anl nlAA
/rite> /rite>"5os ,345)GWM son:"A son:" A,A" "A "ACA" "A "A7?A ?Anl nlAA
/rite> /rite>"5as 4G,G4M son:"A son:" A4A" "A "AXA" "A "AY?A ?Anl nlAA
fail. fail. run>?: run >?:
/rite> /rite>"4s todo lo que puedo mostrar..."?A mostrar..." ?A B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
Co.o se a7a re8erenciado en el E%ercicio 11- Visual Prolog o8rece la con(ersi*n de !i#os de da!os en!re s7- #or e%e.#lo #ara con(er!ir el #roceso de con(er!ir el s!ring 0 a n.ero en!ero se oser(a el E%ercicio 13 Dee acerse .enci*n 4ue en es!a o#or!unidad se u!ili)ar2 o!ro #redicado lla.ado +asDo3ain- el 4ue #er.i!ir2 acer la con(ersi*n .encionada an!erior.en!e3
E"ercicio 1B: implement main implement main open core open coreAAconsole clauses run>? run >? : (alorMtring (alorMtring "1$" "1$"AA
hasGomain> hasGomain>integerA integerA(alorRumero (alorRumero?A ?A (alorRumero (alorRumero to9erm> to9erm>(alorMtring (alorMtring?A ?A
/rite> /rite>"4n nLmero original "A "A(alorRumero (alorRumeroAA" incrementado en <$ es: "A " A (alorRumero (alorRumeroS S<$ <$?A ?A
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 22
Manual Visual Prolog 7.5
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
O!ro uso del #redicado +asDo3ain es cuando se desea leer un da!o #or !eclado !al co.o lo .ues!ra el E%ercicio 1H3
E"ercicio 1: implement main implement main open core open coreAAconsole clauses run>? run >? :
hasGomain> hasGomain>realA realA(alorRumero (alorRumero?A ?A
/rite> /rite>")ngrese un valor:"?A valor:"?A (alorRumero (alorRumero read>?A read>?A
/rite> /rite>"4n nLmero original "A "A(alorRumero (alorRumeroAA" incrementado en <$. es: "A " A (alorRumero (alorRumeroS S<$. <$.?A ?A B B read7har>?A read7har>?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
Visual Prolog o8rece un #redicado lla.ado readS!ring- el 4ue #er.i!e #er.i!e leer un n.ero li.i!ado li.i!ado $ oliga!orio de carac!eres #or !eclado- #or e%e.#lo- si se 4uiere ingresar oliga!oria.en!e una can!ida can!idadd de carac!e carac!eresres- se escri escriir7 ir7aa readS!ring/B- #or lo 4ue 4ue en el caso caso de ingre ingresar sar una una can!idad .enor 4ue la di.ension indicada #or .as 4ue se #resione la !ecla en!er- la a#licaci*n es#erar2 a 4ue se co.#le!e la can!idad de carac!eres indicados en readS!ring- $ en el caso de ingresar una can!idad .a$or de carac!eres- el siguien!e carac!er 4ue es!B 8uera de la di.ension ser2 !o.ado co.o el aer #resionado #resionado la !ecla en!er3 en!er3 Es!o se .ues!ra .ues!ra #or e%e.#lo e%e.#lo en el E%ercicio E%ercicio 03 Es necesario el uso del #redicado s!dio3
E"ercicio 0:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 23
Manual Visual Prolog 7.5
implement main implement main open core open coreAAconsole clauses run>? run >? :
/rite> /rite>")ngrese una cadena no mayor de & caracteres :"?A :" ?A 7adena 7adena stdio:: stdio::readMtring readMtring>>&?A
/rite> /rite>"5a cadena finalmente quedE asO "A " A7adena 7adena?A ?A B B read7har>?A read7har>?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
En Visual Prolog- las condicionales !a.iBn es!2n #resen!es- co.o el caso de i4 !+en end i4 - el cu2l se co.#or!a de la .is.a .anera 4ue en los de.2s lengua%es de #rogra.aci*n3 ,na a#licaci*n de la condicional i4 !+en end i4 - se .ues!ra en el E%ercicio 13
E"ercicio 1:
implement main implement main open core open coreAAconsole class predicates
evalua : >? nondeterm anyflo/ anyflo/..
clauses
evalua>?: evalua>?:
/rite> /rite>")ngrese un nLmero menor a 1$:"?A 1$:"?A
hasGomain> hasGomain>integerA integerARumero Rumero?A ?A Rumero Rumero read>?A read>?A if >Rumero Rumero 1$ 1$?? then
/rite> /rite>"7orrecto" "7orrecto"?? end if . run>? run >? :
evalua>?A evalua>?A B B read7har>?A read7har>?A
fail. fail. run>?: run >?:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 24
Manual Visual Prolog 7.5
B B read7har>?. read7har>?. end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
O!ra condicional !a.iBn #resen!e en Visual Prolog es: i4 !+en else end i4 - la 4ue !a.iBn se co.#or!a co.o en los o!ros lengua%es de #rogra.aci*n3 ,na a#licaci*n de es!a condicional se .ues!ra en el E%ercicio 3
E"ercicio :
implement main implement main open core open coreAAconsole class predicates
evalua : >? nondeterm anyflo/ anyflo/..
clauses
evalua>?: evalua>?:
/rite> /rite>")ngrese un nLmero menor a 1$:"?A 1$:"?A
hasGomain> hasGomain>integerA integerARumero Rumero?A ?A Rumero Rumero read>?A read>?A if >Rumero Rumero 1$ 1$?? then
/rite> /rite>"7orrecto" "7orrecto"?? else
/rite> /rite>")ncorrecto" ")ncorrecto"?? end if . run>? run >? :
evalua>?A evalua>?A B B read7har>?A read7har>?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 25
Manual Visual Prolog 7.5
λ
O!ra condicional !a.iBn #resen!e en Visual Prolog es: i4 !+en elsei4 !+en else end i4 - la 4ue !a.iBn se co.#or!a co.o en los o!ros lengua%es de #rogra.aci*n3 ,na a#licaci*n de es!a condicional se .ues!ra en el E%ercicio "3
E"ercicio ):
implement main implement main open core open coreAAconsole class predicates
evalua : >? nondeterm anyflo/ anyflo/..
clauses
evalua>?: evalua>?:
/rite> /rite>")ngrese un nLmero menor a 1$:"?A 1$:"?A
hasGomain> hasGomain>integerA integerARumero Rumero?A ?A Rumero Rumero read>?A read>?A if >Rumero Rumero 1$ 1$?? then
/rite> /rite>"7orrecto" "7orrecto"?? elseif >>Rumero elseif Rumero 1$ 1$?? then
/rite> /rite>"7asi 7orrecto porque es igual a 1$"? 1$" ? else
/rite> /rite>")ncorrecto porque es mayor a 1$"? 1$"? end if . run>? run >? :
evalua>?A evalua>?A B B read7har>?A read7har>?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 26
Manual Visual Prolog 7.5
SESIÓN 0λ
En Visual Visual Prolog Prolog se usa !a.iBn !a.iBn el #redicado #redicado re(ea!- el 4ue #er.i!e re#e!ir la e%ecuci*n de una de!er.inada #ar!e de una a#licaci*n .ien!ras se cu.#la una condici*n- $ #ara indicar el 8inal de la #ar!e del c*digo 4ue se re#e!ir2 se u!ili)a el #redicado cor!e /? En el E%ercicio & se oser(a la a#licaci*n de es!e #redicado- #ero dee incluirse la lirer7a s!d3
E"ercicio -: implement main implement main open core open coreAAconsoleA consoleAstd class predicates bucle: bucle: >? nondeterm nondeterm.. clauses bucle>?: bucle>?:
/rite> /rite>"4sta parte estJ fuera de lo que se va a repetir..."?A repetir..."?A nlA nlA
repeatA repeatA
/rite> /rite>"4sta parte ya estJ dentro de lo que se va a repetir..." repetir..."?A ?A nlA nlA
/rite> /rite>"Mi desea detener la repeticiEn e scriba la letra s..."?A s..."?A 3ara 3ara read5ine>?A read5ine>?A 3ara 3ara "s" "s"AA IA
/rite> /rite>"4sta parte ya estJ fuera de lo que se va a repetir..." ?. run>? run >? :
bucle>?A bucle>?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 27
Manual Visual Prolog 7.5
λ
El #redicado (rocedure- se u!ili)a en Visual Prolog cuando una regla de conoci.ien!o se 4uiere !ar!ar co.o un #rocedi.ien!o #or lo 4ue no ser2 necesario de8iner o!ra al!erna!i(e de c*digo #ara la regla de conoci.ien!o- es decir se !ra!a co.o si le regla de conoci.ien!o 8uese nonde!er33 En el E%ercicio ' se oser(a la a#licaci*n del #redicado (rocedure E"ercicio <: implement main implement main open core open coreAAconsole class predicates procedimiento : >integer? integer? procedure procedure.. clauses procedimiento> procedimiento>Rumero Rumero?: ?:
/rite> /rite>"4l nLmero ingresado fuF "A "ARumero Rumero?A ?A nl. nl. run>? run >? : nlA nlA
hasGomain> hasGomain>integerA integerARumero Rumero?A ?A
/rite> /rite>")ngrese un nLmero:"?A nLmero:"?A Rumero Rumero read>?A read>?A
procedimiento> procedimiento>Rumero Rumero?A ?A B B read7har>?A read7har>?A
fail. fail. run>?: run >?: B B read7har>?. read7har>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
El #redica #redicado do 3ul!i- se u!ili)a cuando se 4uiere de8iner a una regla de conoci.ien!o #ara 4ue ace#!e (arias i.#le.en!aciones de ella #ero co.o si el #redicado 8uese de!er.in7s!ico- es decir el 8inal de cada i.#le.en!aci*n de la regla de conoci.ien!o de !i#o .ul!i no se necesi!a #oner el #redicado cor!e /? 3 El E%ercicio .ues!ra la a#licaci*n del #redicado 3ul!i
E"ercicio @: Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 28
Manual Visual Prolog 7.5
implement main implement main open core open coreAAconsole class predicates procedimiento : >integer? integer? multi multi.. clauses procedimiento> procedimiento>Rumero Rumero?: ?: Rumero Rumero $A
/rite> /rite>"4l nLmero ingresado fuF "A "ARumero RumeroAA" y es menor que cero..."?A cero..."?A nl. nl.
procedimiento> procedimiento>Rumero Rumero?: ?: Rumero' Rumero '$A
/rite> /rite>"4l nLmero ingresado fuF "A "ARumero RumeroAA" y es mayor que cero..."?A cero..." ?A nl. nl.
procedimiento> procedimiento>Rumero Rumero?: ?:
/rite> /rite>"4l nLmero ingresado fuF "A "ARumero Rumero?A ?A nl. nl. run>? run >? : nlA nlA
hasGomain> hasGomain>integerA integerARumero Rumero?A ?A
/rite> /rite>")ngrese un nLmero:"?A nLmero:"?A Rumero Rumero read>?A read>?A
procedimiento> procedimiento>Rumero Rumero?A ?A B B read7har>?A read7har>?A
fail. fail. run>?. run >?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
El #re #redi dica cado do de!er3- #er. #er.i! i!ee decl declar arar ar una una regl reglaa de cono conoci ci.i .ien en!o !o la 4u 4uee solo solo dee deer2 r2 i.#le.en!arse una sola (e)- es!o sie.#re $ cuando la regla de conoci.ien!o 4ue la con!iene es decir a la regla del !i#o de!er3@ con!enga el #redicado 4ail lo 4ue- #or e%e.#lo #ara la regla run/ del E%ercicio G e%ecu!e au!o.2!ica.en!e el ,ac5!rac5ing3 Es!o se oser(a en el E%ercicio G3
E"ercicio : implement main implement main open core open coreAAconsole class predicates procedimiento : >integer? integer? determ determ..
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 29
Manual Visual Prolog 7.5
clauses procedimiento> procedimiento>Rumero Rumero?: ?: Rumero Rumero $A
/rite> /rite>"4l nLmero ingresado fuF "A "ARumero RumeroAA" y es menor que cero..."?A cero..."?A B B read7har>?A read7har>?A nl. nl. run>? run >? : nlA nlA
hasGomain> hasGomain>integerA integerARumero Rumero?A ?A
/rite> /rite>")ngrese un nLmero:"?A nLmero:"?A Rumero Rumero read>?A read>?A
procedimiento> procedimiento>Rumero Rumero?A ?A B B read7har>?A read7har>?A
fail. fail. run>?. run >?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
λ
O!ro uso del #redicado #redicado nonde!er3 es #ara cuando se de8ine .as de una i.#le.en!ac*n i.#le.en!ac*n #ara una regla regla de conoc conoci. i.ie ien! n!oo $ se #ue #uede de #resen #resen!a !arr la si!u si!uac7 ac7*n *n de no encon encon!r !rar ar solu soluci ci*n *n en las las i.#le.en!aciones de la regla cuando se lla.a a dica regla de conoci.ien!o- con lo 4ue no se generar2 error3 El E%ercicio .ues!ra la a#licaci*n del #redicado nonde!er3 4ue no generar2 error al .o.en!o del #roceso de e%ecuci*n si se ingresa el n.ero cero 0@ a #esar 4ue no se a co.!e.#lado co.!e.#lado una i.#le.en!ac i.#le.en!aci*n i*n #ara !al si!uaci*n si!uaci*n en la regla de conoci.ien!o conoci.ien!o (rocedi3ien!oes!o gracias a 4ue el #redicado en .enci*n es del !i#o nonde!er3
E"ercicio B: implement main implement main open core open coreAAconsole class predicates procedimiento : >integer? integer? nondeterm nondeterm.. clauses procedimiento> procedimiento>Rumero Rumero?: ?: Rumero Rumero $A
/rite> /rite>"4l nLmero ingresado fuF "A "ARumero RumeroAA" y es menor que cero..."?A cero..."?A
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 30
Manual Visual Prolog 7.5
B B read7har>?A read7har>?A nl. nl. procedimiento> procedimiento>Rumero Rumero?: ?: Rumero' Rumero '$A
/rite> /rite>"4l nLmero ingresado fuF "A "ARumero RumeroAA" y es mayor que cero..."?A cero..." ?A B B read7har>?A read7har>?A nl. nl. run>? run >? : nlA nlA
hasGomain> hasGomain>integerA integerARumero Rumero?A ?A
/rite> /rite>")ngrese un nLmero:"?A nLmero:"?A Rumero Rumero read>?A read>?A
procedimiento> procedimiento>Rumero Rumero?A ?A B B read7har>?A read7har>?A
fail. fail. run>?: run >?: B B read5ine>?. read5ine>?.
end implement implement main main goal console:: console::runtf& runtf&>>main:: main::run run?. ?.
MODO GI SESIÓN 0< λ
El o!ro .odo #ara el desarrollo de a#licaciones en Visual Prolog- es el .odo +,I- es decir .odalidad de in!er8a) gr28ica3 Para es!o cuando se crea un nue(o #ro$ec!o $a no se elige Console co.o el !i#o de #ro$ec!o Pro"ec! 'ind- aora se elige MDI /Mul!i Docu3en! In!er4ace- co.o #i.er #aso #ara la creaci*n de un #ro$ec!o !i# GI3
λ
Luego de escriir los da!os necesarios- co.o #or e%e.#lo- el no.re del #ro$ec!o- en es!e caso el E%erc E%ercic icio io "H Figu Figura ra 0'@ 0'@ el cu2l se lla. lla.ar2 ar2 #$ola Mundo GI%- Visual Prolog co.#ilar2
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 31
Manual Visual Prolog 7.5
au!o.2!ica. au!o.2!ica.en!e en!e el #ro$ec!o- $ luego de e%ecu!ar el .is.o- se .os!rar2 una #an!alla #an!alla inicial !al co.o se .ues!ra a con!inuaci*n:
λ
Figura 0@: Pan!alla inicial de e"ecuci7n del Pro*ec!o $ola Mundo GI LuegoLuego- al arir arir el arci(o arci(o 3ain(ro- se oser(a el c*digo 4ue crea la in!er8a) .os!rada en la Figura 0'- !al co.o se .ues!ra a con!inuaci*n: implement main implement main open core open core clauses run>? run >? : 9ask6indo/ task6indo/:: task6indo/::ne/ ne/>?A >?A 9ask6indo/::sho/>?. 9ask6indo/ sho/>?. end implement implement main main goal main4xe:: main4xe::run run>>main:: main::run run?. ?.
λ
Asi.is.o den!ro de la car#e!a Has5indo&- se genera un arci(o lla.ado Has5indo&cl en el 4ue 4ue se os oser er(a (a el el
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
cons cons!r !ruc uc!!or #ne&% el cual cual a su (e) (e) se i.#l i.#le. e.en en!!a en el arc arcii(e
Página Página 32
Manual Visual Prolog 7.5
Has5indo&(ro #ara #er.i!ir la creaci*n de la in!er8a) .os!rada en la 8igura 0'3 Es!o se oser(a a con!inuaci*n:
Has5indo&cl class task6indo/ class task6indo/ : task6indo/ constructors ne/ : >?. end class class task6indo/ task6indo/
Has5indo& Has5indo&(ro (ro /se 3ues!ra el c7digo de la i3(le3en!aci7n de ne& clauses ne/>? ne/>? :
λ
application6indo/:: application6indo/::ne/ ne/>?A >?A
generated)nitialiKe>?. generated)nitialiKe>?.
Para #oder #ersonali)ar el .en de o#ciones 4ue #or de8ec!o considera Visual Prolog en la a#licaci*n creada- ace.os dole clic6 sore el arci(e Has5Menu3nu !a.iBn uicado en la car#e!a Has5indo&@- con lo 4ue se .os!rar2 la siguien!e in!er8a) Figura 0G@:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 33
Manual Visual Prolog 7.5
Figura 0: In!er4a= In! er4a= de Has5Menu3nu λ
Luego Luego-- al arirarir- en la in!e in!er8a r8a)) .os! .os!rad radaa en la Figura Figura 0G 0G-- la o#c o#ci* i*nn #JFile% se oser(an un con%un!o con%un!o de o#cioneso#ciones- 4ue #or el .o.en!o nos cen!rare.os cen!rare.os en la suo#ci*n #JNe&K!F% la cu2l se aili!ar2 4ui!ando 4ui!ando el #c+ec5% de la o#ci*n #Disa,led%- #ara 8inal.en!e 8inal.en!e graar los ca.ios $ cerrar la in!er8a) de #Has5Menu3nu% 3
λ
Aora- se ace dole clic6- en el arci(o #Has5Menu&in% #ara #oder e.#e)ar a crear el c*digo asociado a la o#ci*n #JNe&K!F%- !al co.o se .ues!ra en la 8igura 0:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 34
Manual Visual Prolog 7.5
Figura 0B: In!er4a= I n!er4a= de Has5indo& Has5indo&&in &in (ara generar c7digo λ
Luego- se ace dole clic6 sore #id>4ile>ne&%- con lo 4ue se arir2 el arci(o
#Has5indo&(ro% en donde se escriir2 el c*digo #ara .os!rar el .ensa%e ola Mundo- es!o se
.ues!ra
a
con!inuaci*n
n o
ol(idar
incluir
la
lirer7a
s!dio-
al
8inal
open core open coreAA vpiGomainsA vpiGomainsA stdio?: predicates onXileRe/ : /indo/:: /indo/::menu)tem5istener menu)tem5istener.. clauses onXileRe/> onXileRe/> BMourceA BMourceA B+enu9 B+enu9ag ag?: ?:
λ
/rite> /rite>"*ola +undo III"?. III"?.
Luego al e%ecu!ar el #ro$ec!o- se .os!rar2 el siguien!e resul!ado- .os!rado en la Figura 0H:
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 35
de
Manual Visual Prolog 7.5
Figura 0: esul!ado de le e"ecuci7n del Pro*ec!o $ola Mundo GI
Tenorio Tenorio Cabrera Cabrera Julio Luis Luis
Página Página 36