texto visual prolog 7.4

Upload: luis-aguilar-tejada

Post on 03-Jun-2018

235 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/12/2019 Texto Visual Prolog 7.4

    1/26

    Visual Prolog 7.4Julio Luis Tenorio Cabrera.

    Marcelino Torres Villanueva.

    Robert Jerry Snchez Ticona.

  • 8/12/2019 Texto Visual Prolog 7.4

    2/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 1

    INDICE

    ndice general .....................................................................................................................................ndice de figuras ................................................................................................................................Sobre los autores ............................................................................................................................... Notas preliminares ............................................................................................................................

    Desarrollo de la aplicacin experta NEUROEXPERT ..........................................................................Ejecucin de la aplicacin experta NEUROEXPERT ...........................................................................Sitios Web ...........................................................................................................................................

  • 8/12/2019 Texto Visual Prolog 7.4

    3/26

    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. ......

    Figura 02: Pantalla general de la aplicacin experta ..........................................................................

    Figura 03: Pantalla con opcin y subopciones de la aplicacin experta .............................................Figura 04: Pantalla donde se solicita nombre al usuario de la aplicacin experta ............................

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

    Figura 06: Pantalla de consultas de la aplicacin experta ..................................................................

    Figura 07: Pantalla de resultados de la aplicacin experta ................................................................

  • 8/12/2019 Texto Visual Prolog 7.4

    4/26

    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 IngeniSistemas con Mencin en Administracin y Direccin de Tecnologas de la Informacin.

    Marcelino Torres Villanueva es Ingeniero Qumico, Ingeniero de Sistemas y MaestInformtica.

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

  • 8/12/2019 Texto Visual Prolog 7.4

    5/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 4

    NOTAS PRELIMINARES

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

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

    Julio Luis Tenorio Cabrera

    Marcelino Torres VillanuevaRobert Jerry Snchez Ticona

  • 8/12/2019 Texto Visual Prolog 7.4

    6/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 5

    DESARROLLO DE LA APLICACIN EXPERTA NEUROLGICO

    Ingresar al Visual Prolog y seleccionar la opcinProject y luego la opcinNew con lo cualaparecer una interfaz en la que se escribir el nombre del proyecto, en este

    NEUROLOGICO .

    Luego Visual Prolog ejecutar automticamente el proceso de compilacin y linkeado con se genera la aplicacin por defecto. Luego para ejecutar la aplicacin se seleccina la

    Execute y como resultado se tiene la interfaz de la aplicacin.

    En este punto es importante indicar que dentro de la carpetaTaskWindow se encuentran un

    conjunto de archivos y una carpetaToolbars que luego se trabajarn, siendo por ahora de inteel archivoTaskWindow.win mediante el cual, con el botn derecho del mouse y la opc

    Attributes , podemos modificar los atributos de la ventana raz, es decir,TaskWindow , porejemplo el nuevo ttulo de la ventana ser SISTEMA EXPERTO EN NEUROLOGAy seactiva la opcinMaximized y luego seleccionar el botnOk . Si se ejecuta nuevamente laplicacin se vern los cambios.

    Es de inters ahora el archivoTaskMenu.mnu , mediante el cual se puede modificar las opcioque por defecto implementa Visual Prolog. Entonces se eliminar todas las opciones menosFile ydentro de esta opcin se eliminar todas las subopciones menosNew y Exit .

    Las opciones no eliminadas se renombrarn de la siguiente manera:File = Consulta , New =

    Nueva , Exit = Salir . La opcinNueva deben de habilitarse ya que por defecto est deshabilita

    En este punto se debe ejecutar nuevamente la aplicacin mediante la opcinBuild y luegoBuild con lo que se observa la advertencia que no es usado el predicado onHelpAbout. Esto significaque hay un cdigo asociado a las opciones eliminadas que est dems en el a

    TaskWindow.pro , de donde debemos eliminar a dicho cdigo. Para ir al arc

    TaskWindow.pro , se hace doble click en el mensaje de advertencia.

  • 8/12/2019 Texto Visual Prolog 7.4

    7/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 6

    El cdigo a eliminar es el siguiente:

    predicates

    onHelpAbout : window::menuItemListener.

    clausesonHelpAbout(TaskWin, _MenuTag):-

    _AboutDialog = aboutDialog::display(TaskWin).

    Luego en el mismo archivo, se debe modificar en el siguiente cdigo, el valortrue por false , paraas eliminar la opcinWindow 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 mecuando se ejecuta la aplicacin experta. Para lograr esto se debe modificar el siguiente cdi

    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 aplicacieste mensaje debe aparecer automticamente luego que se muestra la interfaz del punto aPara esto haciendo click con el botn derecho sobre la carpetaNEUROLOGICO , seleccione la

  • 8/12/2019 Texto Visual Prolog 7.4

    8/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 7

    opcinNew in New Package y luego elija el objeto dialog para luego escribir como nombredialog:dlgmensaje .

    Debe eliminar todos los botones que aparecen menosOk, el cul se renombrar con:Continuar yluego elija el objetoStatic Text y en la propiedadText escriba un mensaje explicando al usuarla finalidad del sistema experto. Finalmente cierra el dilogo creado y lo graba.

    Como se dijo anteriormente el mensaje creado en el punto anterior debe apautomticamente, por lo que para esto hacemos doble click enTaskWindow.win , con lo que en lacarpetaWindow hacemos doble click en el eventoOnShow y modificamos el siguiente cdigo:

    predicatesonShow : 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, click en el botnAdd All para que finalmente aparezca automticamente el mensaje creado.

    A continuacin se deber crear un dilogodlgnombre (la propiedad Text de este objeto debecontenerSolicitando nombre al usuario), con el mismo procedimiento para creardlgmensaje ,el cul no deber tener ningn botn de ventana y slo deber quedar el botnOk (ok_ctl) , el cul

  • 8/12/2019 Texto Visual Prolog 7.4

    9/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 8

    se renombrar conSalir . Luego se debe colocar un botn de comando denominadoContinuar cuyo nombre serbtncontinuar_ctl .

    El objetivo dedlgnombre es que el usuario ingrese su nombre en una caja de texto y mientralo haga no se podr continuar. Entonces se debe considerar un objeto tipoStatic Text para elmensaje de:Ingrese su nombre por favor . Debe haber tambin unEdit Control para ingresarel nombre del usuario, elEdit Control , se llamarednombre_ctl .

    En este punto se deber mediante las opcionesConsulta y luego Nueva , llamar al dilogo

    dlgnombre y para esto, se hace doble click en el archivoTaskWindow.win de la carpeta

    TaskWindow , para luego de la interfaz que aparece seleccionar la carpetaMenu , TaskMenu ,

    id_file y luego hacer doble click sobreid_file_new con lo que se deber completar el cdigo qaparece 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 necesahace click en el botnAdd All con lo que debera ejecutarse sin ningn problema hasta el pdesarrollado.

    Ahora se debe crear un dilogo llamadodlgbienvenida , mediante el mismo procedimiento q para crear los dilogos anteriores (recordar haciendo click con el botn derecho sobre la

    NEUROLOGICO , seleccione la opcinNew in New Package) . En este dilogo debe mostrarsun mensaje de bienvenida al uso del sistema al usuario. Se debe tener en cuenta que edilogo debe capturarse el nombre del usuario ingresado en el dilogo anteriordlgnombre.

    Entonces ahora escribir el siguiente cdigo al programar el botn de comando:btncontinuar_ctl ,en eldlgnombre.pro :

  • 8/12/2019 Texto Visual Prolog 7.4

    10/26

    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

    aparezca un mensaje de bienvenida con el nombre de usuario ingresado. En el adlgbienvenida.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 dilogodlgbienvenida , se coloca unStaticText_ctl , el que debe ser del tipoFact Variable ,con lo que ahora se llamar:staticText_ctl, quedando la propiedadText en blanco. Finalmente

  • 8/12/2019 Texto Visual Prolog 7.4

    11/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 10

    debe quedar solo el botnok_ctl, el cul se renombrar con la propiedadtext, con el nombre

    Continuar.

    En el archivodlgbienvenida.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 l(men) de herramientas, para lo cual se abre haciendo doble click, el archivoProjectToolbar.pro ,y el cdigo que deber quedar por el momento se muestra a continuacin:

  • 8/12/2019 Texto Visual Prolog 7.4

    12/26

    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 artificiadilogo se llamadlgconsulta al cul en la propiedadText se deber escribir:Consultando alexperto. Finalmente a este punto, en el dilogo creado, se cambiar la apariencia del botOk

  • 8/12/2019 Texto Visual Prolog 7.4

    13/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 12

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

    o Un Push Button , el que se denominarbtndiagnosticar_ctl.

    o Un StaticText_ctl , para que recepcione el nombre del usuario ingresado anteriormenque debe ser del tipoFact Variable , con lo que ahora se llamar:staticText_ctl,quedando la propiedadText en blanco.

    o Un StaticText1_ctl, el que se denominar (en la propiedadText ) Sintomas aseleccionar.

    o Un StaticText2_ctl, el que se denominar (en la propiedadText ) Sintomasseleccionados.

    o Un List Box , el que se denominarlbdisponibles_ctl.

    o Un List Box , el que se denominarlbseleccionados_ctl.

    o Un StaticText3_ctl, el que se denominar (en la propiedadText ) Enfermedaddiagnosticada.

    o Un Edit Control , denominadoedenfermedad_ctl , poniendo en blanco la propiedadText por el momento.

    o Un StaticText4_ctl, el que se denominar (en la propiedadText ) Tratamiento

    recomendado.

    o Un Edit Control , denominadoedtratamiento_ctl , poniendo en blanco la propiedadText por el momento.

  • 8/12/2019 Texto Visual Prolog 7.4

    14/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 13

    Lo que ahora se debe hacer es que cuando se llame adlgconsulta , automticamente los sntomadisponibles deben aparecer enlbdisponibles_ctl . Para esto en la pestaaEvents de la caja de propiedades dedlgconsulta , se debe hacer doble click sobre el eventoShowListener , con lo queaparecer 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 sntom

    lbdisponibles_ctl , este sea agregado albseleccionados_ctl , eliminndose automticamente d primerList Box y viceversa, es decir si el usuario desea eliminar un sntoma selecciona

    lbseleccionados_ctl , pues lo debe seleccionar con doble click y automticamente panuevamente a formar parte delbdisponibles_ctl . Para esto en la pestaaEvents de la caja de propiedades delbdisponibles_ctl , se hace doble click sobre el eventoDoubleClickListener , conlo que aparecer el siguiente cdigo:

    predicates

    onLbdisponiblesDoubleClick : listBox::doubleClickListener.

    clauses

    onLbdisponiblesDoubleClick(_Source).

  • 8/12/2019 Texto Visual Prolog 7.4

    15/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 14

    El cdigo anterior se modificar de la siguiente manera:

    predicates

    onLbdisponiblesDoubleClick : listBox::doubleClickListener.

    clausesonLbdisponiblesDoubleClick(_Source):-

    lbdisponibles_ctl:getAllSelected(E,I),

    E=[EE|_],

    I=[II|_],

    lbseleccionados_ctl:add(EE),

    lbdisponibles_ctl:delete(II),

    !.

    onLbdisponiblesDoubleClick(_Source).

    Ahora en la pestaaEvents de la caja de propiedades delbseleccionados_ctl , se hace doble clicksobre el eventoDoubleClickListener , 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).

  • 8/12/2019 Texto Visual Prolog 7.4

    16/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 15

    Se debe ahora llamar desde el dilogodlgbienvenida al dilogodlgconsulta . Para esto, en el botnContinuar (es el botn ok_ctl) dedlgbienvenida , 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:

  • 8/12/2019 Texto Visual Prolog 7.4

    17/26

    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 botnbtndiagnosticar_ctl, para esto se hace dobleclick 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:

  • 8/12/2019 Texto Visual Prolog 7.4

    18/26

    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 sntomas seleccionados").

  • 8/12/2019 Texto Visual Prolog 7.4

    19/26

    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 exp

    Fuente: (Elaboracin propia, 2014)

  • 8/12/2019 Texto Visual Prolog 7.4

    20/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 19

    Figura 02: Pantalla general de la aplicacin experta.

    Fuente: (Elaboracin propia, 2014)

  • 8/12/2019 Texto Visual Prolog 7.4

    21/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 20

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

    Fuente: (Elaboracin propia, 2014)

  • 8/12/2019 Texto Visual Prolog 7.4

    22/26

    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)

  • 8/12/2019 Texto Visual Prolog 7.4

    23/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 22

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

    Fuente: (Elaboracin propia, 2014)

  • 8/12/2019 Texto Visual Prolog 7.4

    24/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 23

    Figura 06: Pantalla de consultas de la aplicacin experta.

    Fuente: (Elaboracin propia, 2014)

  • 8/12/2019 Texto Visual Prolog 7.4

    25/26

    Visual Prolog 7.4

    Tenorio, Torres, Snchez Pgina 24

    Figura 07 : Pantalla de resultados de la aplicacin experta.

    Fuente: (Elaboracin propia, 2014)

  • 8/12/2019 Texto Visual Prolog 7.4

    26/26

    Visual Prolog 7.4

    SITIOS WEB

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

    http://www.visual-prolog.com/http://www.visual-prolog.com/http://www.visual-prolog.com/http://www.visual-prolog.com/