Anda di halaman 1dari 26

Visual Prolog 7.

4





Julio Luis Tenorio Cabrera.
Marcelino Torres Villanueva.
Robert Jerry Snchez Ticona.


Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 1

INDICE
ndice general .................................................................................................................................................1
ndice de figuras ............................................................................................................................................2
Sobre los autores ...........................................................................................................................................3
Notas preliminares ........................................................................................................................................4
Desarrollo de la aplicacin experta NEUROEXPERT ..............................................................................5
Ejecucin de la aplicacin experta NEUROEXPERT .............................................................................18
Sitios Web ....................................................................................................................................................25

























Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 2

INDICE DE FIGURAS

Figura 01: Pantalla con mensaje explicativo al usuario de la finalidad de la aplicacin experta. ..............18
Figura 02: Pantalla general de la aplicacin experta ..................................................................................19
Figura 03: Pantalla con opcin y subopciones de la aplicacin experta .....................................................20
Figura 04: Pantalla donde se solicita nombre al usuario de la aplicacin experta ....................................21
Figura 05: Pantalla de bienvenida al usuario de la aplicacin experta .......................................................22
Figura 06: Pantalla de consultas de la aplicacin experta ..........................................................................23
Figura 07: Pantalla de resultados de la aplicacin experta ........................................................................24




Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 3

SOBRE LOS AUTORES

Julio Luis Tenorio Cabrera es Ingeniero de Computacin y Sistemas y Maestro en Ingeniera de
Sistemas con Mencin en Administracin y Direccin de Tecnologas de la Informacin.

Marcelino Torres Villanueva es Ingeniero Qumico, Ingeniero de Sistemas y Maestro en
Informtica.

Robert Jerry Snchez Ticona es Ingeniero de Computacin y Sistemas y Maestro en Tecnologa
de Informacin e Informtica Educativa.


















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 4

NOTAS PRELIMINARES

El presente texto, pretende proporcionar al lector una visin prctica de la programacin en el
lenguaje declarativo Visual Prolog 7.4, mediante el desarrollo de una aplicacin experta bsica y
dar as un panorama del paradigma de programacin lgica.

Se espera que por parte del lector profundice la investigacin de la programacin en este lenguaje
y as tambin contribuir a enriquecer y fortalecer el uso de este lenguaje en el desarrollo de
aplicaciones expertas reales.

Julio Luis Tenorio Cabrera.
Marcelino Torres Villanueva.
Robert Jerry Snchez Ticona.
















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 5

DESARROLLO DE LA APLICACIN EXPERTA NEUROLGICO

Ingresar al Visual Prolog y seleccionar la opcin Project y luego la opcin New con lo cual
aparecer una interfaz en la que se escribir el nombre del proyecto, en este caso:
NEUROLOGICO.

Luego Visual Prolog ejecutar automticamente el proceso de compilacin y linkeado con lo que
se genera la aplicacin por defecto. Luego para ejecutar la aplicacin se seleccina la opcin
Execute y como resultado se tiene la interfaz de la aplicacin.

En este punto es importante indicar que dentro de la carpeta TaskWindow se encuentran un
conjunto de archivos y una carpeta Toolbars que luego se trabajarn, siendo por ahora de inters
el archivo TaskWindow.win mediante el cual, con el botn derecho del mouse y la opcin
Attributes, podemos modificar los atributos de la ventana raz, es decir, TaskWindow, por
ejemplo el nuevo ttulo de la ventana ser SISTEMA EXPERTO EN NEUROLOGA y se
activa la opcin Maximized y luego seleccionar el botn Ok. Si se ejecuta nuevamente la
aplicacin se vern los cambios.

Es de inters ahora el archivo TaskMenu.mnu, mediante el cual se puede modificar las opciones
que por defecto implementa Visual Prolog. Entonces se eliminar todas las opciones menos File y
dentro de esta opcin se eliminar todas las subopciones menos New y Exit.

Las opciones no eliminadas se renombrarn de la siguiente manera: File = Consulta, New =
Nueva, Exit = Salir. La opcin Nueva deben de habilitarse ya que por defecto est deshabilitada.

En este punto se debe ejecutar nuevamente la aplicacin mediante la opcin Build y luego Build
con lo que se observa la advertencia que no es usado el predicado onHelpAbout. Esto significa
que hay un cdigo asociado a las opciones eliminadas que est dems en el archivo
TaskWindow.pro, de donde debemos eliminar a dicho cdigo. Para ir al archivo
TaskWindow.pro, se hace doble click en el mensaje de advertencia.

Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 6

El cdigo a eliminar es el siguiente:

predicates
onHelpAbout : window::menuItemListener.
clauses
onHelpAbout(TaskWin, _MenuTag):-
_AboutDialog = aboutDialog::display(TaskWin).

Luego en el mismo archivo, se debe modificar en el siguiente cdigo, el valor true por false, para
as eliminar la opcin Window la que no se elimina en modo diseo. El cdigo a modificar es:

constants
mdiProperty : boolean = true.

Tambin en el mismo archivo se recomienda modificar la aparicin de la ventana de mensajes
cuando se ejecuta la aplicacin experta. Para lograr esto se debe modificar el siguiente cdigo:

predicates
onShow : window::showListener.
clauses
onShow(_, _CreationData):-
_MessageForm = messageForm::display(This).

de la siguiente manera:

predicates
onShow : window::showListener.
clauses
onShow(_, _CreationData).
%_MessageForm = messageForm::display(This).

El paso siguiente es enviar al usuario un mensaje que explique la finalidad de la aplicacin, pero
este mensaje debe aparecer automticamente luego que se muestra la interfaz del punto anterior.
Para esto haciendo click con el botn derecho sobre la carpeta NEUROLOGICO, seleccione la
Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 7

opcin New in New Package y luego elija el objeto dialog para luego escribir como nombre del
dialog: dlgmensaje.

Debe eliminar todos los botones que aparecen menos Ok, el cul se renombrar con: Continuar y
luego elija el objeto Static Text y en la propiedad Text escriba un mensaje explicando al usuario
la finalidad del sistema experto. Finalmente cierra el dilogo creado y lo graba.

Como se dijo anteriormente el mensaje creado en el punto anterior debe aparecer
automticamente, por lo que para esto hacemos doble click en TaskWindow.win, con lo que en la
carpeta Window hacemos doble click en el evento OnShow y modificamos el siguiente cdigo:

predicates
onShow : window::showListener.
clauses
onShow(_, _CreationData).
%_MessageForm = messageForm::display(This).

escribiendo el siguiente cdigo:

predicates
onShow : window::showListener.
clauses
onShow(_, _CreationData):-
% _MessageForm = messageForm::display(This).
postAction({ :- _ = dlgmensaje::display(This) }).

Al ejecutar la aplicacin, de aparecer algn mensaje de agregar las libreras necesarias, se hace
click en el botn Add All para que finalmente aparezca automticamente el mensaje creado.

A continuacin se deber crear un dilogo dlgnombre (la propiedad Text de este objeto deber
contener Solicitando nombre al usuario), con el mismo procedimiento para crear dlgmensaje,
el cul no deber tener ningn botn de ventana y slo deber quedar el botn Ok (ok_ctl), el cul
Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 8

se renombrar con Salir. Luego se debe colocar un botn de comando denominado Continuar
cuyo nombre ser btncontinuar_ctl.

El objetivo de dlgnombre es que el usuario ingrese su nombre en una caja de texto y mientras no
lo haga no se podr continuar. Entonces se debe considerar un objeto tipo Static Text para el
mensaje de: Ingrese su nombre por favor. Debe haber tambin un Edit Control para ingresar
el nombre del usuario, el Edit Control, se llamar ednombre_ctl.

En este punto se deber mediante las opciones Consulta y luego Nueva, llamar al dilogo
dlgnombre y para esto, se hace doble click en el archivo TaskWindow.win de la carpeta
TaskWindow, para luego de la interfaz que aparece seleccionar la carpeta Menu, TaskMenu,
id_file y luego hacer doble click sobre id_file_new con lo que se deber completar el cdigo que
aparece por defecto, con el siguiente:

predicates
onFileNew : window::menuItemListener.
clauses
onFileNew(_Source, _MenuTag):-
_ = dlgnombre::display(This).

Luego al ejecutar la aplicacin, de aparecer algn mensaje de agregar las libreras necesarias, se
hace click en el botn Add All con lo que debera ejecutarse sin ningn problema hasta el punto
desarrollado.

Ahora se debe crear un dilogo llamado dlgbienvenida, mediante el mismo procedimiento que
para crear los dilogos anteriores (recordar haciendo click con el botn derecho sobre la carpeta
NEUROLOGICO, seleccione la opcin New in New Package). En este dilogo debe mostrarse
un mensaje de bienvenida al uso del sistema al usuario. Se debe tener en cuenta que en este
dilogo debe capturarse el nombre del usuario ingresado en el dilogo anterior dlgnombre.

Entonces ahora escribir el siguiente cdigo al programar el botn de comando: btncontinuar_ctl,
en el dlgnombre.pro:
Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 9

predicates
onBtningresarClick : button::clickResponder.
clauses
onBtningresarClick(_Source) = button::defaultAction:-
Contenido=ednombre_ctl:getText(),
Contenido<>"",
close(),
_ = dlgbienvenida::display(getParent(), ednombre_ctl:getText()),
!.
onBtningresarClick(_Source) = button::defaultAction:-
vpiCommonDialogs::error("Mensaje del Sistema","Ingrese su nombre").

Al ingresar el nombre de usuario, se debe displayar un dilogo llamado dlgbienvenida, en donde
aparezca un mensaje de bienvenida con el nombre de usuario ingresado. En el archivo
dlgbienvenida.cl, debe el cdigo quedar as:

/*************************************************************************
****

Copyright (c) 2014 My Company

**************************************************************************
****/
class dlgbienvenida : dlgbienvenida
open core


predicates
display : (window Parent, string Name) -> dlgbienvenida Dlgbienvenida.

constructors
new : (window Parent, string Name).

end class dlgbienvenida

En el dilogo dlgbienvenida, se coloca un StaticText_ctl, el que debe ser del tipo Fact Variable,
con lo que ahora se llamar: staticText_ctl, quedando la propiedad Text en blanco. Finalmente
Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 10

debe quedar solo el botn ok_ctl, el cul se renombrar con la propiedad text, con el nombre
Continuar.

En el archivo dlgbienvenida.pro, parte del cdigo a modificar debe quedar as:

clauses
display(Parent,Name) = Dialog :-
Dialog = new(Parent,Name),
Dialog:show().

facts
name : string.

clauses
new(Parent,Name) :-
name := Name,
dialog::new(Parent),
generatedInitialize(),
staticText_ctl:setText(string::format("%, te doy la bienvenida,
con gusto te ayudar. Presiona en Continuar por favor.", name)).

En este punto del desarrollo de la aplicacin, se trabajar formateando las opciones de la barra
(men) de herramientas, para lo cual se abre haciendo doble click, el archivo ProjectToolbar.pro,
y el cdigo que deber quedar por el momento se muestra a continuacin:











Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 11

/*************************************************************************
****
Copyright (c) 2014 My Company
**************************************************************************
****/
implement projectToolbar
open core, vpiDomains, vpiToolbar, resourceIdentifiers
clauses
create(Parent):-
_ = vpiToolbar::create(style, Parent, controlList).
% This code is maintained automatically, do not update it manually. 22:18:31-3.4.2014
constants
style : vpiToolbar::style = tb_top().
controlList : vpiToolbar::control_list =
[
tb_ctrl(id_file_new,pushb(),resId(idb_NewFileBitmap),"Nueva consulta;",1,1),
tb_ctrl(id_file_open,pushb(),resId(idb_OpenFileBitmap),"Abrir consulta;",1,1),
tb_ctrl(id_file_save,pushb(),resId(idb_SaveFileBitmap),"Grabar consulta;",1,1
),
vpiToolbar::separator,
%tb_ctrl(id_edit_undo,pushb(),resId(idb_UndoBitmap),"Undo;Undo",1,1),
%tb_ctrl(id_edit_redo,pushb(),resId(idb_RedoBitmap),"Redo;Redo",1,1),
%vpiToolbar::separator,
%tb_ctrl(id_edit_cut,pushb(),resId(idb_CutBitmap),"Cut;Cut to Clipboard",1,1),
%tb_ctrl(id_edit_copy,pushb(),resId(idb_CopyBitmap),"Copy;Copy to Clipboard",1,1),
%tb_ctrl(id_edit_paste,pushb(),resId(idb_PasteBitmap),"Paste;Paste from Clipboard",
1,1),
%vpiToolbar::separator,
tb_ctrl(id_help_contents,pushb(),resId(idb_HelpBitmap),"Ayuda;",1,1)
].
% end of automatic code
end implement projectToolbar


Ahora se debe crear un dilogo en el que se realizar las consultas al experto artificial. Este
dilogo se llama dlgconsulta al cul en la propiedad Text se deber escribir: Consultando al
experto. Finalmente a este punto, en el dilogo creado, se cambiar la apariencia del botn Ok
Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 12

por Salir. En este dilogo dlgconsulta, se debern poner los siguientes controles con sus
respectivas propiedades:

o Un Push Button, el que se denominar btndiagnosticar_ctl.

o Un StaticText_ctl, para que recepcione el nombre del usuario ingresado anteriormente, el
que debe ser del tipo Fact Variable, con lo que ahora se llamar: staticText_ctl,
quedando la propiedad Text en blanco.

o Un StaticText1_ctl, el que se denominar (en la propiedad Text) Sintomas a
seleccionar.

o Un StaticText2_ctl, el que se denominar (en la propiedad Text) Sintomas
seleccionados.

o Un List Box, el que se denominar lbdisponibles_ctl.

o Un List Box, el que se denominar lbseleccionados_ctl.

o Un StaticText3_ctl, el que se denominar (en la propiedad Text) Enfermedad
diagnosticada.

o Un Edit Control, denominado edenfermedad_ctl, poniendo en blanco la propiedad Text
por el momento.

o Un StaticText4_ctl, el que se denominar (en la propiedad Text) Tratamiento
recomendado.

o Un Edit Control, denominado edtratamiento_ctl, poniendo en blanco la propiedad Text
por el momento.

Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 13

Lo que ahora se debe hacer es que cuando se llame a dlgconsulta, automticamente los sntomas
disponibles deben aparecer en lbdisponibles_ctl. Para esto en la pestaa Events de la caja de
propiedades de dlgconsulta, se debe hacer doble click sobre el evento ShowListener, con lo que
aparecer el siguiente cdigo:

predicates
onShow : window::showListener.
clauses
onShow(_Source, _Data).

El cdigo anterior se modificar quedando de la siguiente manera:

predicates
onShow : window::showListener.
clauses
onShow(_Source, _Data):-
lbdisponibles_ctl:add("Sntoma_01"),
lbdisponibles_ctl:add("Sntoma_02"),
lbdisponibles_ctl:add("Sntoma_03"),
lbdisponibles_ctl:add("Sntoma_04"),
lbdisponibles_ctl:add("Sntoma_05").

Ahora la idea es que cuando el usuario seleccione (con doble click), un sntoma de
lbdisponibles_ctl, este sea agregado a lbseleccionados_ctl, eliminndose automticamente del
primer List Box y viceversa, es decir si el usuario desea eliminar un sntoma seleccionado de
lbseleccionados_ctl, pues lo debe seleccionar con doble click y automticamente pasar
nuevamente a formar parte de lbdisponibles_ctl. Para esto en la pestaa Events de la caja de
propiedades de lbdisponibles_ctl, se hace doble click sobre el evento DoubleClickListener, con
lo que aparecer el siguiente cdigo:

predicates
onLbdisponiblesDoubleClick : listBox::doubleClickListener.
clauses
onLbdisponiblesDoubleClick(_Source).

Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 14

El cdigo anterior se modificar de la siguiente manera:

predicates
onLbdisponiblesDoubleClick : listBox::doubleClickListener.
clauses
onLbdisponiblesDoubleClick(_Source):-
lbdisponibles_ctl:getAllSelected(E,I),
E=[EE|_],
I=[II|_],
lbseleccionados_ctl:add(EE),
lbdisponibles_ctl:delete(II),
!.

onLbdisponiblesDoubleClick(_Source).

Ahora en la pestaa Events de la caja de propiedades de lbseleccionados_ctl, se hace doble click
sobre el evento DoubleClickListener, con lo que aparecer el siguiente cdigo:

predicates
onLbseleccionadosDoubleClick : listBox::doubleClickListener.
clauses
onLbseleccionadosDoubleClick(_Source).

El cdigo anterior se modificar de la siguiente manera:

predicates
onLbseleccionadosDoubleClick : listBox::doubleClickListener.
clauses
onLbseleccionadosDoubleClick(_Source):-
lbseleccionados_ctl:getAllSelected(E,I),
E=[EE|_],
I=[II|_],
lbdisponibles_ctl:add(EE),
lbseleccionados_ctl:delete(II),
!.
onLbseleccionadosDoubleClick(_Source).

Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 15

Se debe ahora llamar desde el dilogo dlgbienvenida al dilogo dlgconsulta. Para esto, en el
botn Continuar (es el botn ok_ctl) de dlgbienvenida, poner el siguiente cdigo:

predicates
onOkClick : button::clickResponder.

clauses
onOkClick(_Source) = button::defaultAction:-
close(),
_ = dlgconsulta::display(getParent(), name),
!.

Ahora en el archivo dlgconsulta.cl, se debe escribir el siguiente cdigo:

/*************************************************************************
****

Copyright (c) 2014 My Company

**************************************************************************
****/
class dlgconsulta : dlgconsulta
open core


predicates
display : (window Parent, string Name) -> dlgconsulta Dlgconsulta.

constructors
new : (window Parent, string Name).
end class dlgconsulta

En el archivo dlgconsulta.pro, se debe escribir el siguiente cdigo:



Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 16

clauses
display(Parent,Name) = Dialog :-
Dialog = new(Parent,Name),
Dialog:show().

facts
nam : string.

clauses
new(Parent,Name) :-
nam:=Name,
dialog::new(Parent),
generatedInitialize(),
staticText_ctl:setText(string::format("%, selecciona los requerimientos requeridos.", n
am)).

Finalmente se debe escribir el cdigo para el botn btndiagnosticar_ctl, para esto se hace doble
click en el botn mencionado con lo que aparecer el siguiente cdigo:

predicates
onBtndiagnosticarClick : button::clickResponder.
clauses
onBtndiagnosticarClick(_Source) = button::defaultAction.

el que se modificar de la siguiente manera:











Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 17

domains
sintomas = string*.
facts
diagnostico:(sintomas,string,string).
clauses
diagnostico(["Sntoma_01","Sntoma_02","Sntoma_03"],"Enfermedad_01_02_03","Trata
miento_01_02_03").
diagnostico(["Sntoma_04","Sntoma_05"],"Enfermedad_04_05","Tratamiento_04_05").

predicates
onBtndiagnosticarClick : button::clickResponder.
clauses
onBtndiagnosticarClick(_Source) = button::defaultAction:-
edenfermedad_ctl:setText(""),
edtratamiento_ctl:setText(""),
S=lbseleccionados_ctl:getAll(),
diagnostico(S,E,T),
edenfermedad_ctl:setText(E),
edtratamiento_ctl:setText(T),
!.
onBtndiagnosticarClick(_Source) = button::defaultAction:-
edenfermedad_ctl:setText(""),
edtratamiento_ctl:setText(""),
vpiCommonDialogs::error("Mensaje del Sistema","No existen respuestas para los snto
mas seleccionados").










Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 18

EJECUCIN DE LA APLICACIN EXPERTA NEUROLGICO

Figura 01: Pantalla con mensaje explicativo al usuario de la finalidad de la aplicacin experta.



Fuente: (Elaboracin propia, 2014)












Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 19

Figura 02: Pantalla general de la aplicacin experta.


Fuente: (Elaboracin propia, 2014)















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 20

Figura 03: Pantalla con opcin y subopciones de la aplicacin experta.


Fuente: (Elaboracin propia, 2014)















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 21

Figura 04: Pantalla donde se solicita nombre al usuario de la aplicacin experta.


Fuente: (Elaboracin propia, 2014)















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 22

Figura 05: Pantalla de bienvenida al usuario de la aplicacin experta.


Fuente: (Elaboracin propia, 2014)















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 23

Figura 06: Pantalla de consultas de la aplicacin experta.


Fuente: (Elaboracin propia, 2014)















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 24

Figura 07: Pantalla de resultados de la aplicacin experta.


Fuente: (Elaboracin propia, 2014)















Visual Prolog 7.4

Tenorio, Torres, Snchez Pgina 25

SITIOS WEB

Prolog Development Center (PDC). [Fecha de consulta: 15 enero 2013]. Disponible
en: http://www.visual-prolog.com/

Anda mungkin juga menyukai