Proyecto Prolog PDF

45
 2008 PROYECTO DE INTELIGENCIA ARTIFICIAL V IS U A L UNIVERSIDAD NACIONAL DE CAJAMARCA INTEGRANTES CASTAÑEDA AQUINO ALEX CHONON BARRANTES DENIS HUMAN CRUZADO JEINER PALOMINO CORREA JUBERTH PUMACCAJIA TASILLA JAVIER 

description

gfd

Transcript of Proyecto Prolog PDF

  • 2008

    PROYECTO DE INTELIGENCIA ARTIFICIAL VISUAL

    UNIVERSIDAD NACIONAL DE CAJAMARCA

    INTEGRANTES

    CASTAEDA AQUINO ALEX CHONON BARRANTES DENIS

    HUMAN CRUZADO JEINER PALOMINO CORREA JUBERTH PUMACCAJIA TASILLA JAVIER

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 2

    INDICE

    Ttulo Pgina I.- INTRODUCCIN 03 II.- OBJETIVOS. 03 III.- MARCO TERICO. 04 A.- Prolog y el Lenguaje de la Lgica de Primer Orden 04 A.1. Predicados 04 A.2. Trminos 04 B. Estructura de un Programa 05 IV.- DESARROLLO DE LA APLICACIN. 06 A.- Configurando Opciones Bsicas Del Proyecto. 06 B.- Diseo De La Ventana Principal. 09 C.- Diseo De Ventanas De Tipo Dialog 10 D.- Insertar Codigo De Los Dialog Al Programa Principal. 14 E.- Insertar Cdigo En El Programa Principal. 15 F.- Ejecutar La Aplicacion Y Eliminar Componentes Adicionales 27 G.- Nuestra Aplicacin Ejecutandose. 31 V.- DESARROLLO DEL PROGRAMA EN VISUAL PROLOG

    PARA TRABAJAR CON LISTAS 38

    VI.- CONCLUSIONES. 44 VII.- RECOMENDACINES. 44 VIII.- BIBLIOGRAFIA

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 3

    I.- INTRODUCCIN

    En el presente proyecto pretendemos mostrar en profundidad las nuevas herramientas con los que cuenta visual prolog, como por ejemplo botones de seleccin, edicin en cuadros de listas, llamado a otro tipo de ventanas, etc. Dichas herramientas nos permitirn contruir aplicaciones cada vez ms complicadas y robuscas, con interfaces visuales atractivas, y no las tpicas ventanas de consola, las cuales no muestran el amplio poder de PROLOG.

    El presente proyecto lo trabajaremos con una base de datos, lo que implico buscar una amplia gama de manuales, separatas, y diapositivas las cuales las encontramos en internet, sin embargo no nos consideramos expertos en el lenguaje ya que aun nos falta mucho por aprender. En el presente proyecto manejaremos la base de datos correspondiente a libros y revistas.

    II.- OBJETIVOS.

    Comprender la Programacin visual y orientado a eventos con Visual Prolog.

    Conocer el uso de ventanas y botones de Visual Prolog.

    Conocer el manejo de Visual Prolog.

    Conocer elementos de Visual Prolog, como por ejemplo, elementos de seleccin, cuadros de listas, mens, emergentes, etc.

    Trabajar con listas en visual prolog.

    Dar a conocer que los programas hechos en PROLOG no solo se pueden mostrar

    en consola tipo D.O.S sino tambin con una interfaz grfica tan igual como si se tratase de cualquier otro ID de programacin.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 4

    III.- MARCO TERICO.

    En presente marco terico no pretende abarcar todo lo referente al lenguaje PROLOG y mucho menos a todas las funciones contenidas en VISUAL PROLOG sino ms bien pretende dar un acercamiento al PROLOG.

    A.- PROLOG Y EL LENGUAJE DE LA LGICA DE PRIMER ORDEN La Lgica de Primer Orden analiza las frases sencillas del lenguaje (frmulas atmicas o elementales) separndolas en Trminos y Predicados. Los trminos hacen referencia a los objetos que intervienen y los predicados a las propiedades o relaciones entre estos objetos. Adems, dichas frmulas atmicas se pueden combinar mediante Conectivas permitindonos construir frmulas ms complejas, llamadas frmulas moleculares. A.1. PREDICADOS

    Se utilizan para expresar propiedades de los objetos, predicados mondicos, y relaciones entre ellos, predicados polidicos. En Prolog los llamaremos hechos. Debemos tener en cuenta que:

    Los nombres de todos los objetos y relaciones deben comenzar con una

    letra minscula.

    Primero se escribe la relacin o propiedad: predicado

    Y los objetos se escriben separndolos mediante comas y encerrados entre parntesis: argumentos.

    Al final del hecho debe ir un punto (".").

    A.2. TRMINOS

    Los trminos pueden ser constantes o variables, y suponemos definido un dominio no vaco en el cual toman valores (Universo del Discurso). En la prctica se toma como dominio el Universo de Herbrand. Para saber cuntos individuos del universo cumplen una determinada propiedad o relacin, cuantificamos los trminos.

    Las constantes se utilizan para dar nombre a objetos concretos del dominio, dicho de otra manera, representan individuos conocidos de nuestro Universo. Adems, como ya hemos dicho, las constantes atmicas de Prolog tambin se utilizan para representar propiedades y relaciones entre los objetos del dominio. Hay dos clases de constantes:

    tomos: existen tres clases de constantes atmicas:

    Cadenas de letras, dgitos y subrayado (_) empezando por letra minscula.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 5

    Cualquier cadena de caracteres encerrada entre comillas simples ('). Combinaciones especiales de signos: "?-", ":-", ...

    Nmeros: se utilizan para representar nmeros de forma que se puedan realizar operaciones aritmticas. Dependen del ordenador y la implementacin.

    - Enteros: en la implementacin de Prolog-2 puede utilizarse cualquier entero que el intervalo [-223,223-1]=[-8.388.608,8.388.607].

    B. ESTRUCTURA DE UN PROGRAMA

    El hecho de programar en Prolog consiste en dar al ordenador un Universo finito en forma de hechos y reglas, proporcionando los medios para realizar inferencias de un hecho a otro. A continuacin, si se hacen las preguntas adecuadas, Prolog buscar las respuestas en dicho Universo y las presentar en la pantalla. La programacin en Prolog consiste en:

    declarar algunos HECHOS sobre los objetos y sus relaciones, definir algunas REGLAS sobre los objetos y sus relaciones, y hacer PREGUNTAS sobre los objetos y sus relaciones.

    Programa Prolog: Conjunto de afirmaciones (hechos y reglas) representando los conocimientos que poseemos en un determinado dominio o campo de nuestra competencia. Ejecucin del programa: Demostracin de un Teorema en este Universo, es decir, demostracin de que una conclusin se deduce de las premisas (afirmaciones previas).

    Un sistema Prolog est basado en un comprobador de teoremas por resolucin para clusulas de Horn. La regla de resolucin no nos dice que clusulas elegir ni que literales unificar dentro de cada clusula. La estrategia de resolucin particular que utiliza Prolog es una forma de resolucin de entrada lineal (rbol de bsqueda estndar). Para la bsqueda de clusulas alternativas para satisfacer el mismo objetivo, Prolog adopta una estrategia de primero hacia abajo (recorrido del rbol en profundidad). Por todo esto, el orden de las clusulas (hechos y reglas) de un determinado procedimiento es importante en Prolog, ya que determina el orden en que las soluciones sern encontradas, e incluso puede conducir a fallos en el programa. Ms importante es, si cabe, el orden de las metas a alcanzar dentro del cuerpo de una regla.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 6

    IV.- DESARROLLO DE LA APLICACIN.

    A.- CONFIGURANDO OPCIONES BASICAS DEL PROYECTO. Para ejecutar Visual Prolog, nos dirigimos al men inicio, una vez dentro realizamos lo siguiente:

    Presionamos la opcin New Project del men Project. El dialogo que aparece nos permite configurar el mtodo de desarrollo de

    la aplicacin en curso de una forma muy sencilla.

    1. Pestaa General En esta pestaa se identifican el nombre del proyecto y el directorio en el cual va a estar situada nuestra aplicacin.

    En el caso de nuestro proyecto el nombre del proyecto ser Libros y el directorio base ser un directorio nuevo y vaco, es recomendable tener cada proyecto con cada directorio distinto.

    2. Pestaa Target En esta pestaa se configura el tipo de plataforma donde se ejecutar el programa, el tipo de estrategia de interfaz de usuario que se utilizar, la aplicacin que se pretende generar, por ejemplo, un archivo exe o una dll y por ltimo seleccionar el lenguaje de programacin que se utilizar para generar el programa principal. Para todos nuestros ejemplos, las opciones siempre sern las mismas, es decir, el tipo de plataforma deber ser Windows32, UI Strategy ser de modo VPI de lo contrario el mtodo de programacin no ser ni visual ni orientado a eventos y se comportar como una aplicacin realizada para DOS. En Target Type seleccionaremos exe ya que es de este tipo la aplicacin que vamos a generar y en Main Program el lenguaje utilizado ser Prolog.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 7

    3. Pestaa VPI Options En esta pestaa se especifican si

    se incluyen o no ciertas opciones que son propias de la interfaz VPI, por ejemplo:

    MDI MODE: especifica si la

    ventana principal de nuestra aplicacin es de modo MDI o no, para nuestro ejemplo no vamos a utilizar el modo MDI ya que la dificultad la tenemos al momento de agregar objetos a nuestra aplicacin como botones, cuadros de edicin, botones de seleccin, etc., en cambio una ventana en modo normal puede contener cualquier tipo de elementos.

    3D Look for Controls: determina si los objetos que va a usar nuestra aplicacin van a ser visto en modo tridimensional.

    Toolbar and Help Line: determina si la aplicacin tendr una barra de herramientas y una lnea de ayuda en la parte superior de la ventana.

    Message Windows: especifica si se incluir o no el cuadro de mensaje, nosotros no lo vamos a ocupar ya que lo que interesa es ocupar al cien por ciento las cualidades de la programacin Visual y no escribir ni leer como si fuera por DOS.

    4. Pestaa User Info Aqu se especifican datos, como

    por ejemplo, el nombre de la compaa, el nombre del autor, la versin de nuestra aplicacin y una breve descripcin de nuestro programa.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 8

    Figura: Aspecto de creacin de ejemplo Libros En el cuadro de arriba se ven diferentes pestaas que pertenecen al dialogo de creacin de la aplicacin, la configuracin de ellas van directamente ligadas a como queremos representar nuestro programa. Las pestaas restantes Other Options y Help Maker se deben dejar tal como estn, ya que son especificaciones para construir aplicaciones mas avanzadas, como por ejemplo, conectividad con base de datos, cambiar el generador de cdigo, etc.

    Terminados estos pasos presionamos el botn Create momento en que nuestra aplicacin ha sido creada exitosamente, de inmediato deber aparecer el siguiente dialogo:

    En la parte izquierda de la figura se pueden apreciar los botones que nos permiten crear nuevos componentes para nuestra aplicacin. En la parte central aparecen dos archivos uno que siempre ser VPItools.pro y otro llamado con el nombre del proyecto (en este caso Libros.pro), estos dos archivos nunca debern ser borrados ya que vern afectado el normal funcionamiento de la aplicacin. En la parte derecha aparecen los botones que nos permiten editar y eliminar componentes que fueron anteriormente aadidos, as como tambin acceder a la ventana del cdigo experto que nos permite insertar cdigo fcilmente a nuestra aplicacin.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg. 9

    B.- DISEO DE LA VENTANA PRINCIPAL. Una vez terminados todos los pasos anteriores de manera exitosa lo que nos interesa es empezar a disear nuestro programa. Para eso se utiliza la Task Windows como ventana nica (esta ventana es creada por defecto y siempre estar presente en todos los programas), los pasos para poder construir de forma fcil y rpida la aplicacin Libros es realizando los siguientes pasos:

    Dirigirse al botn situado en la parte izquierda llamado Window que nos mostrara todas las ventanas actuales que existen en el programa, cmo no se ha creado ninguna ventana aparece siempre la ventana principal o Task Window que es sobre la cual vamos a trabajar:

    Se hace doble clic sobre el elemento Task Window en la parte central de la figura, de inmediato aparece la ventana principal, para trabajar sobre ella.

    Aparece la Ventana principal con un panel y una serie de componentes que podemos utilizar en el diseo de nuestras ventanas.

    Controls nos proporciona un conjunto de controles que podemos pegar en la ventana. Layout provee herramientas para colocar los elementos dentro de la ventana. La ventana principal de nuestra aplicacin tendr el siguiente aspecto tras haber pegado los controles adecuados, despus de la figura de abajo se especifican los nombres con que fueron identificados para luego ocuparlos en el cdigo principal.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    10

    Los controles que son identificados son aquellos que nos permitirn interactuar al usuario con el sistema y no aquellos que solamente cumplan con la funcin de proporcionar informacin, como por ejemplo, una etiqueta esttica.

    El aspecto de nuestra Task Window deber ser como la imagen de arriba. La identificacin de cada uno de los controles es la siguiente:

    El primer Radio Button ser llamado idc_libro El segundo Radio Button ser llamado idc_revista El primer Push Button ser llamado idc_ingresar El segundo Push Button ser llamado idc_modificar El tercer Push Button ser llamado idc_eliminar El cuarto Push Button ser llamado idc_listar El List Box ser llamado listado

    El nombre de los controles es importante ya que los identifica en el cdigo para poder diferenciarlos.

    C.- DISEO DE VENTANAS DE TIPO DIALOG Un paso nuevo en este proyecto es la creacin de ventanas tipo Dialog, la cualidad de trabajar con este tipo de ventanas es que liberan de carga a la ventana principal (Task Window).

    Push Button

    Radio Button List Box

    Static Text

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    11

    Para empezar a disear las diferentes ventanas tipo dialog se realiza los siguientes pasos:

    Se hacemos clic en el botn Dialog situado en la parte izquierda de la figura adyacente.

    Aparece un elemento en la lista llamado About Dialog, esto sucede porque es una ventana tipo Dialog creada por el sistema y esta por defecto en cualquier aplicacin que se cree posteriormente. Esta ventana identifica el tipo de autor, la versin del programa, etc., datos que fueron entregados por el creador del programa en la pestaa User Info durante la creacin del proyecto. Lo que interesa es crear ventanas nuevas e incorporarlas a la aplicacin, para ello se presiona el botn New, situado en la parte derecha de la figura.

    Aparece una ventana similar a la figura ubicada en la parte izquierda. Aqu se especifican entre otras cosas lo siguiente:

    El nombre del dialogo. El titulo que tendr la ventana. Las coordenadas de la

    ventana. Si va a ser de tipo modal o no

    modal (la diferencia esta, en que si es modal no se podr acceder a otra ventana mientras la Dialog este activa, y no modal que si se podr acceder a otras ventanas).

    Si tendr botones de cerrar, minimizar y maximizar.

    Una vez llenada de forma completa la ventana anterior se presiona el botn Ok, para as poder insertar elementos a nuestra ventana Dialog. Debera aparecer la siguiente ventana con tres Push Button llamados, OK, Cancel y Help.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    12

    Estos tres botones los crea por defecto, por lo que se proceder a quitarlos de la ventana. Una vez borrados se deja la dialog, de la siguiente forma:

    Los cuales poseen los siguientes nombres, para as poder identificarlos en el cdigo:

    El primer Edit Control ser llamado idc_nombre. El segundo Edit Control ser llamado idc_codigo. Los Edit Control de la fecha sern llamados idc_dia, idc_mes, idc_ao. Los Edit Control del autor sern llamados idc_nombre1, idc_paterno,

    idc_materno. Los Push Button sern llamados idc_ok (Guardar), idc_cancel (Salir).

    Para la aplicacin que se est realizando se necesita crear tres Ventanas tipo Dialog aparte de la que se acaba de crear. Como la idea es la misma el proceso de creacin no se volver a repetir, solamente se mostrarn las ventanas con sus nombres para identificarlas despus en el cdigo.

    Push Button

    Edit Control

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    13

    1.- Segunda Ventana tipo Dialog (llamada Mod_Libro)

    Los nombres que tendrn los controles sern los siguientes para esta ventana:

    Los Edit Control de los datos del libro sern llamados idc_libro, idc_codigo, idc_dia, idc_mes, idc_ao.

    Los Edit Control de los datos del autor sern llamados idc_nombre1, idc_paterno, idc_materno.

    El Push Button que dice Guardar y Salir ser llamado idc_ok.

    2.- Tercera Ventana tipo Dialog (llamada mod_revista)

    Los nombres que tendrn los controles sern los siguientes para esta ventana:

    Los Edit Control sern llamados idc_ejemplar, idc_codigo, idc_nombre. El Push Button que dice Guardar y Salir ser llamado idc_ok.

    Push Button

    Edit Control

    Edit Control

    Push Button

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    14

    3.- Cuarta Ventana tipo Dialog (llamado Revista)

    Los nombres que tendrn los controles sern los siguientes para esta ventana:

    Los Edit Control sern llamados idc_ejemplar, idc_codigo, idc_nombre. Los Push Button sern llamados idc_ok (Guardar), idc_cancel (Salir).

    D.- INSERTAR CODIGO DE LOS DIALOG AL PROGRAMA PRINCIPAL. El crear ventanas tipo Dialog (y para cualquier otro tipo de ventanas) no implica que se pueda acceder a ella directamente, por ejemplo, si se hiciera un botn para llamar a la ventana dialog Libro, se agregara el cdigo necesario para hacerlo, pero en el momento de la ejecucin marcara un error de falta de objeto.

    Esto sucede porque el programa principal una vez que se han creado las ventanas, necesita que sea insertado el cdigo para cada ventana que se haya creado con anterioridad. Los pasos para insertar el cdigo de cada ventana al programa principal son los siguientes:

    Se presiona el botn dialog situado en la parte izquierda de la figura.

    Luego se realiza lo siguiente:

    Se marca al medio el Dialogo que se utiliza para agregar el cdigo.

    Luego se presiona el botn Code Expert

    situado en la parte derecha de la figura.

    Aparecer la siguiente ventana en la cual se puede agregar definitivamente el cdigo.

    Edit Control

    Push Button

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    15

    En esta ventana se especifican los argumentos necesarios para una correcta insercin del cdigo de la ventana al programa principal.

    Se verifica que el Dialog sea realmente con el cual se esta trabajando.

    Se selecciona el lugar donde se insertar

    el cdigo, que ser el nombre del proyecto con extensin .pro.

    El estilo de cdigo debe ser

    dialog_Create().

    El tipo de evento debe ser Window.

    Por ltimo el Evento debe ser e_Create.

    Una vez que estn bien y chequeados correctamente los pasos anteriores, se presiona el botn Default Code, situado en la parte derecha de la figura.

    Una vez presionado el botn Default

    Code, presionamos el botn Ok.

    De manera similar realizamos el proceso de insercin de cdigo para los tres dilogos restantes, los cuales son: revista, mod_revista, mod_libro.

    E.- INSERTAR CDIGO EN EL PROGRAMA PRINCIPAL. Al momento de la creacin de un programa Visual Prolog crea 2 archivos (como se dijo anteriormente). Cada uno de los cuales contiene cdigo que sirve para la ejecucin de un programa en particular, el cdigo que se insertara deber hacerse con mucho cuidado ya que modificar dicho cdigo puede significar que la aplicacin no correr y darse cuenta donde esta el error es algo difcil de encontrar. Antes de insertar cdigo para los botones, se tiene que crear los dominios para poder hacer funcionar nuestra aplicacin con bases de datos, definiendo diferentes tipos de dominios.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    16

    Primero se va a definir los tipos de dominios y los tipos de datos que tendr la aplicacin.

    Para ello se debe posicionar en el archivo Libros.pro situado en la parte central de la figura.

    Luego se presiona el botn Edit que nos

    mostrara el cdigo de todo el proyecto.

    Se definir los siguientes tipos de datos en la parte principal del cdigo recientemente editado:

    global domains material=libro(string Nom_lib,symbol Cod_lib,fecha Fecha,autor Autor); revista(integer N_ejemplar,symbol Cod_rev,string Nom_rev) fecha=fe(integer Dia,integer Mes,integer Ano) autor=aut(string Nombre,string Ap1,string Ap2) global database mat(material)

    Lo que se hizo ac es definir tres tipos de datos material, fecha y autor. En la cual material puede ser de dos tipos libro o revista. Por ltimo la base de datos ser llamada mat, para todos los efectos de insercin, modificacin y eliminacin de datos. El siguiente paso es insertar o agregar el cdigo para los controles de la Task Window. Recordando un poco la Task Window tiene el siguiente aspecto:

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    17

    La insercin de cdigo para los radio button: se explicar el ingreso de cdigo para el primer radiobuton, y luego seguir el mismo procedimiento para el segundo radio button.

    Para ello se presiona el botn Code Expert, momento en que debiera aparecer la siguiente pantalla. En ella, se identifica que tipo de objeto es (en este caso control) y se ubica el nombre del radio button por las siglas r.b.(radio button) que se encuentran en la parte central baja de la figura. Teniendo bien identificado el objeto, se presiona el botn Add Clause, para luego as poder editar la clusula que da por defecto el sistema.

    El cdigo que ingresar al radio button llamado idc_libro es el siguiente:

    %BEGIN Task Window, idc_libro _CtlInfo task_win_eh(_Win,e_Control(idc_libro,_CtrlType,_CtrlWin,_CtlInfo),0):-!, B=win_GetCtlHandle(_Win,idc_revista), win_Check(B,checkbox_off), !. %END Task Window, idc_libro _CtlInfo

    Para el Segundo Radio Button llamado idc_revista el cdigo deber ser el siguiente:

    %BEGIN Task Window, idc_revista _CtlInfo task_win_eh(_Win,e_Control(idc_revista,_CtrlType,_CtrlWin,_CtlInfo),0):-!, A=win_GetCtlHandle(_Win,idc_libro), win_Check(A,checkbox_off), !. %END Task Window, idc_revista _CtlInfo

    A continuacin se detallan la explicacin de las instrucciones:

    A=win_GetCtlHandle(_Win,idc_libro), asigna a la variable A el identificador del objeto idc_libro.

    win_Check(A,checkbox_off), chequea el estado del objeto identificado en la variable A. El parmetro checkbox_off permite no chequear el control.

    Estas instrucciones permiten diferenciar, si se tratarn los libros o las revistas. El siguiente paso es ingresar el cdigo para los Push Button, el proceso de insercin de condigo es similar a la anterior, por lo cual solamente se mostrar el

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    18

    cdigo para que funcionen de acuerdo a las necesidades que se planteaban al comenzar el proyecto.

    1.- Cdigo para el primer Push Button llamado idc_ingresar.

    %BEGIN Task Window, idc_ingresar _CtlInfo task_win_eh(_Win,e_Control(idc_ingresar,_CtrlType,_CtrlWin,_CtlInfo),0):- K=win_GetCtlHandle(_Win,idc_libro), H=win_IsChecked(K), H=checkbox_on, dlg_libro_create(_Win),!. task_win_eh(_Win,e_Control(idc_ingresar,_CtrlType,_CtrlWin,_CtlInfo),0):- K2=win_GetCtlHandle(_Win,idc_revista), H2=win_IsChecked(K2), H2=checkbox_on, dlg_revista_create(_Win), !. task_win_eh(_Win,e_Control(idc_ingresar,_CtrlType,_CtrlWin,_CtlInfo),0):- dlg_Note("Ingreso","Debe Seleccionar Libro o Revista"), !. %END Task Window, idc_ingresar _CtlInfo

    La explicacin para las instrucciones se detalla a continuacin:

    H=win_IsChecked(K), chequea el identificador que posee la variable K (verdadero o falso).

    H=checkbox_on, compara el valor obtenido arriba con checkbox_on(verdadero) o checkbox_on(falso).

    dlg_libro_create(_Win), ejecuta el dialogo llamado libro. dlg_Note("Ingreso","Debe Seleccionar Libro o Revista"), muestra un

    mensaje de advertencia en caso que no se cumplan las dos condiciones de arriba.

    2.- Cdigo para el segundo Push Button llamado idc_modificar.

    Este botn tiene la finalidad de encontrar un elemento que ha sido seleccionado de la lista, para ello se obtiene el ndice de dicho elemento con la instruccin lbox_GetSelIndex, luego se implementa la instruccin lbox_GetItem, la cual devuelve el elemento seleccionado como un solo string. Lo extenso del cdigo se explica por que se debe separar el string obtenido en los campos que conforman la base de datos.

    Nota: Cmo no existe una instruccin modificar, la implementacin de esta se hace eliminando el elemento seleccionado, para luego volver a agregarlo pero modificado.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    19

    %BEGIN Task Window, idc_modificar _CtlInfo %Cdigo para la edicin de elementos que pertenecen al dominio libro. task_win_eh(_Win,e_Control(idc_modificar,_CtrlType,_CtrlWin,_CtlInfo),0):- K=win_GetCtlHandle(_Win,idc_libro), H=win_IsChecked(K), %chequea que se ha seleccionado libro H=checkbox_on, W=win_GetCtlHandle(_Win,listado), INTEGER = lbox_GetSelIndex(W), %obtiene el ndice de la seleccin en una lista. S=lbox_GetItem(W, INTEGER), %devuelve el elemento seleccionado en texto. %Nombre searchstring(S," ",A), %busca el string %en la variable S y devuelve la posicin en la variable A.

    str_len(S,Largo), %transforma de string a largo A2=A-1, A3=A+5, L1=Largo-A-4, substring(S,1,A2,K3),%devuelve un substring de la %variable S1 empezando en la variable A2 y tomando %K3 caracteres. substring(S,A3,L1,S2), %Codigo searchstring(S2," ",A21), str_len(S2,Largo2), A22=A21-1, A31=A21+5, L2=Largo2-A21-4, substring(S2,1,A22,K4), substring(S2,A31,L2,S3), %dia searchstring(S3,"/",A41), str_len(S3,Largo3), A42=A41-1, A43=A41+1, L3=Largo3-A41, substring(S3,1,A42,K5), substring(S3,A43,L3,S4), str_int(K5,K6), %mes searchstring(S4,"/",A51), str_len(S4,Largo4), A52=A51-1, A53=A51+1, L4=Largo4-A51, substring(S4,1,A52,K7), substring(S4,A53,L4,S5), str_int(K7,K8), %ao searchstring(S5," ",A61), str_len(S5,Largo5), A62=A61-1, A63=A61+5, L5=Largo5-A61-4, substring(S5,1,A62,K9),

    Todas estas instrucciones

    sirven para ir separando el

    elemento seleccionado en la

    lista y dejarlo en varias

    Es la continuacin para los

    datos que conforman la

    parte de libros de nuestra

    base de datos.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    20

    substring(S5,A63,L5,S6), str_int(K9,K10), %nombre autor searchstring(S6," ",A71), str_len(S6,Largo6), A72=A71-1, A73=A71+5, L6=Largo6-A71-4, substring(S6,1,A72,K11), substring(S6,A73,L6,S7), %paterno autor searchstring(S7," ",A81), str_len(S7,Largo7), A82=A81-1, A83=A81+5, L7=Largo7-A81-4, substring(S7,1,A82,K12), substring(S7,A83,L7,S8), %materno autor searchstring(S8," ",A91), A92=A91-1, substring(S8,1,A92,K13), %ltima instruccin para separar los datos de acuerdo al formato %de la base de datos. asserta(mat(libro(K3,K4,fe(K6,K8,K10),aut(K11,K12,K13)))), %ingresa los datos a la base %para editarlos y as despus poder eliminarlos. dlg_mod_libro_create(_Win),!; %Cdigo para la edicin de elementos que pertenecen al dominio revista. K=win_GetCtlHandle(_Win,idc_revista), H=win_IsChecked(K),%chequea que se ha seleccionado revista H=checkbox_on, W=win_GetCtlHandle(_Win,listado), INTEGER = lbox_GetSelIndex(W), S=lbox_GetItem(W, INTEGER), %Codigo N searchstring(S," ",A), str_len(S,Largo), A11=A-1, A12=A+5, L1=Largo-A-4, substring(S,1,A11,K1), substring(S,A12,L1,S2), str_int(K1,K2), %Ejemplar searchstring(S2," ",A21), str_len(S2,Largo2), A22=A21-1, A31=A21+5, L2=Largo2-A21-4, substring(S2,1,A22,K3), substring(S2,A31,L2,S3), %Nombre=S3 asserta(mat(revista(K2,K3,S3))), %ltima instruccin para separar los datos de acuerdo al %formato de la base de datos. dlg_mod_revista_create(_Win),!; %Enva en mensaje de advertencia si no se ha seleccionado ningn elemento. dlg_Note("Modificar","Debe Seleccionar Algn Elemento de la Lista"),!. %END Task Window, idc_modificar _CtlInfo

    Es la continuacin para los

    datos que conforman la

    parte de libros de nuestra

    base de datos.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    21

    El largo del cdigo para esta clusula es por que en Prolog no hay una instruccin que permita modificar datos que pertenezcan a un dominio previamente declarado, lo que se hizo, es un truco, que agrega dos veces el elemento a la base de datos, para as poder rescatar los valores y mostrarlos en la ventana de modificacin de datos. 3.- Cdigo para el tercer Push Button llamado idc_eliminar. Este botn tiene la finalidad de encontrar un elemento que ha sido seleccionado de la lista y eliminarlo de la lista y de la base de datos, para ello se obtiene el ndice de dicho elemento con la instruccin lbox_GetSelIndex, luego se implementa la instruccin lbox_GetItem, la cual devuelve el elemento seleccionado como un slo string.

    %BEGIN Task Window, idc_eliminar _CtlInfo task_win_eh(_Win,e_Control(idc_eliminar,_CtrlType,_CtrlWin,_CtlInfo),0):- Ke=win_GetCtlHandle(_Win,idc_libro), He=win_IsChecked(Ke),%chequea que se ha seleccionado la opcin libro He=checkbox_on, W=win_GetCtlHandle(_Win,listado), INTEGER = lbox_GetSelIndex(W),%idem a modificar S=lbox_GetItem(W, INTEGER), %Nombre searchstring(S," ",A), str_len(S,Largo), A2=A-1, A3=A+5, L1=Largo-A-4, substring(S,1,A2,K3), substring(S,A3,L1,S2), %Cdigo searchstring(S2," ",A21), str_len(S2,Largo2), A22=A21-1, A31=A21+5, L2=Largo2-A21-4, substring(S2,1,A22,K4), substring(S2,A31,L2,S3), %dia searchstring(S3,"/",A41), str_len(S3,Largo3), A42=A41-1, A43=A41+1, L3=Largo3-A41, substring(S3,1,A42,K5), substring(S3,A43,L3,S4), str_int(K5,K6), %mes searchstring(S4,"/",A51), str_len(S4,Largo4), A52=A51-1, A53=A51+1, L4=Largo4-A51,

    Todas estas instrucciones

    sirven para ir separando el

    elemento seleccionado en la

    lista y dejarlo en varias

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    22

    substring(S4,1,A52,K7), substring(S4,A53,L4,S5), str_int(K7,K8), %ao searchstring(S5," ",A61), str_len(S5,Largo5), A62=A61-1, A63=A61+5, L5=Largo5-A61-4, substring(S5,1,A62,K9), substring(S5,A63,L5,S6), str_int(K9,K10), %nombre autor searchstring(S6," ",A71), str_len(S6,Largo6), A72=A71-1, A73=A71+5, L6=Largo6-A71-4, substring(S6,1,A72,K11), substring(S6,A73,L6,S7), %paterno autor searchstring(S7," ",A81), str_len(S7,Largo7), A82=A81-1, A83=A81+5, L7=Largo7-A81-4, substring(S7,1,A82,K12), substring(S7,A83,L7,S8), %materno autor searchstring(S8," ",A91), A92=A91-1, substring(S8,1,A92,K13), %ltima instruccin para separar los datos de acuerdo al formato %de la base de datos. retract(mat(libro(K3,K4,fe(K6,K8,K10),aut(K11,K12,K13)))),%elimina el elemento que ha sido seleccionado de la base de datos. lbox_Delete(W, INTEGER),%elimina el elemento de la lista !; Ke=win_GetCtlHandle(_Win,idc_revista), He=win_IsChecked(Ke), %chequea que se ha seleccionado la opcin libro He=checkbox_on, W=win_GetCtlHandle(_Win,listado), INTEGER = lbox_GetSelIndex(W),%idem a modificar S=lbox_GetItem(W, INTEGER), %Codigo N searchstring(S," ",A), str_len(S,Largo), A11=A-1, A12=A+5, L1=Largo-A-4, substring(S,1,A11,K1), substring(S,A12,L1,S2), str_int(K1,K2), %Ejemplar searchstring(S2," ",A21), str_len(S2,Largo2),

    Todas estas instrucciones

    sirven para ir separando el

    elemento seleccionado en la

    lista y dejarlo en varias

    variables, como en el

    Se separa el elemento

    seleccionado en varias

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    23

    A22=A21-1, A31=A21+5, L2=Largo2-A21-4, substring(S2,1,A22,K3), substring(S2,A31,L2,S3), %ltima instruccin para separar los datos de acuerdo al formato %de la base de datos. %Nombre=S3 retract(mat(revista(K2,K3,S3))),% elimina el elemento que ha sido seleccionado de la base %de datos. lbox_Delete(W, INTEGER), %elimina el elemento de la lista !; %Enva en mensaje de advertencia si no se ha seleccionado ningn elemento. dlg_Note("Eliminar","Debe Seleccionar Algn Elemento de la Lista"), !. %END Task Window, idc_eliminar _CtlInfo

    El proceso de eliminacin, lo que hace es eliminar el elemento de la lista y de la base de datos. Lo que hace es buscar el elemento en la lista, para eliminarlo conjuntamente en las dos partes, al final si no estn seleccionadas las opciones Libro o Revista entrega un mensaje al usuario de que Debe Seleccionar Algn elemento de la Lista.

    4.- Cdigo para el cuarto Push Button llamado idc_listar.

    El proceso de listar elementos de la base de datos consiste en ir formateando los datos de manera de que puedan ser mostrados en pantalla con espacios de separacin y en fila.

    %BEGIN Task Window, idc_listar _CtlInfo task_win_eh(_Win,e_Control(idc_listar,_CtrlType,_CtrlWin,_CtlInfo),0):- K2=win_GetCtlHandle(_Win,listado), lbox_clear(K2),%limpia la lista para listar todos los elementos de la base de datos K=win_GetCtlHandle(_Win,idc_libro), H=win_IsChecked(K),%chequea que se ha seleccionado la opcin Libro. H=checkbox_on,!, mat(libro(A,B,fe(D,M,An),aut(N,Ap1,Ap2))),%obtiene los datos que pertenecen a libro K2=win_GetCtlHandle(_Win,listado), str_int(DD,D), str_int(MM,M), str_int(AA,An), concat(A," ",P1),%concatena la variable A con % y el resultado lo deja en P1. concat(B," ",P2), concat(P1,P2,P3), concat(DD,"/",P4), concat(MM,"/",P5), concat(P4,P5,P6), concat(AA," ",P7), concat(N," ",P8), concat(P7,P8,P9), concat(Ap1," ",P10), concat(Ap2," ",P11), concat(P10,P11,P12), concat(P3,P6,P13),

    Junta todos los datos de la base de datos, y los muestra en la lista como un solo string.

    Luego se hace lo mismo pero con las revistas.

    Se separa el elemento seleccionado en

    varias variables, como en el caso de los

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    24

    concat(P9,P12,P14), concat(P13,P14,P15), lbox_Add(K2,P15),%Agrega el elemento a la lista fail; K2=win_GetCtlHandle(_Win,listado), lbox_clear(K2), K=win_GetCtlHandle(_Win,idc_revista), H=win_IsChecked(K), H=checkbox_on,!, mat(revista(Ej,Cod,Nomr)), K2=win_GetCtlHandle(_Win,listado), str_int(SEj,Ej), concat(SEj," ",Po1), concat(Cod," ",Po2), concat(Po1,Po2,Po3), concat(Po3,Nomr,Po4), lbox_Add(K2,Po4),fail; %Enva en mensaje de advertencia si no se ha seleccionado libro o revista. dlg_Note("Listar","Debe Seleccionar Libro o Revista"),fail. %END Task Window, idc_listar _CtlInfo

    La tarea de trabajar con los dilogos es exactamente de la misma forma en que se trabaja en la Task Window, ya que solamente se esta tratando con Push Button.

    5.- Codigo para insertar libro, evento control, del idc_ok

    %BEGIN libro, idc_ok _CtlInfo dlg_libro_eh(_Win,e_Control(idc_ok,_CtrlType,_CtrlWin,_CtlInfo),0):-!, %dlg_mod_libro_eh(_Win,e_Create(_Creationdata),0):-!, % Obtiene los identificadores de los campos de texto P1=win_GetCtlHandle(_Win,idc_nombre), P2=win_GetCtlHandle(_Win,idc_codigo), P3=win_GetCtlHandle(_Win,idc_dia), P4=win_GetCtlHandle(_Win,idc_mes), P5=win_GetCtlHandle(_Win,idc_ao), P6=win_GetCtlHandle(_Win,idc_nombre1), P7=win_GetCtlHandle(_Win,idc_paterno), P8=win_GetCtlHandle(_Win,idc_materno), % Obtiene el texto asociado a los campos de texto A=win_GetText(P1), B=win_GetText(P2), D=win_GetText(P3), E=win_GetText(P4), F=win_GetText(P5), G=win_GetText(P6), H=win_GetText(P7), I=win_GetText(P8), %Convierte string a integer, esto es para la fecha str_int(D,DD), str_int(E,EE), str_int(F,FF), % Inserta en la base de datos asserta(mat(libro(A,B,fe(DD,EE,FF),aut(G,H,I)))), !. %END libro, idc_ok _CtlInfo

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    25

    6.- cdigo para el e_create de dialog mod_libro. %Begin create dlg_mod_libro_eh(_Win,e_Create(_Creationdata),0):-!, % Obtiene los identificadores de los campos de texto P1=win_GetCtlHandle(_Win,idc_nombre), P2=win_GetCtlHandle(_Win,idc_codigo), P3=win_GetCtlHandle(_Win,idc_dia), P4=win_GetCtlHandle(_Win,idc_mes), P5=win_GetCtlHandle(_Win,idc_ao), P6=win_GetCtlHandle(_Win,idc_nombre1), P7=win_GetCtlHandle(_Win,idc_paterno), P8=win_GetCtlHandle(_Win,idc_materno), %Consulta en la base de datos mat(libro(A,B,fe(D,E,F),aut(G,H,I))), %Asigna el texto a los EditText win_settext(P1,A), win_settext(P2,B), str_int(DD,D), win_settext(P3,DD), str_int(EE,E), win_settext(P4,EE), str_int(FF,F), win_settext(P5,FF), win_settext(P6,G), win_settext(P7,H), win_settext(P8,I), %Elimina de la base de datos retract(mat(libro(A,B,fe(D,E,F),aut(G,H,I)))), retract(mat(libro(A,B,fe(D,E,F),aut(G,H,I)))), !. %end create

    Todo esto va en la parte de clauses de la ventana mod_libro.

    7.- Codigo para insertar Revista, evento control, del idc_ok %BEGIN Revista, idc_ok _CtlInfo dlg_revista_eh(_Win,e_Control(idc_ok,_CtrlType,_CtrlWin,_CtlInfo),0):-!, P1=win_GetCtlHandle(_Win,idc_ejemplar), P2=win_GetCtlHandle(_Win,idc_codigo), P3=win_GetCtlHandle(_Win,idc_nombre), A=win_GetText(P1), B=win_GetText(P2), D=win_GetText(P3), str_int(A,AA), %Graba en la Base de Datos asserta(mat(revista(AA,B,D))), !. %END Revista, idc_ok _CtlInfo

    Estas instrucciones van puestas en la creacin de la ventana mod_libro y sirven para complementar la idea de implementar la instruccin modificar ya que rescata los datos de la base, los muestra en pantalla y luego los elimina, para que puedan ser grabados y queden solo una vez en la base de datos.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    26

    8.- Cdigo para el e_create del mod_revista %Begin create dlg_mod_revista_eh(_Win,e_Create(_CreationData),0):-!, P1=win_GetCtlHandle(_Win,idc_ejemplar), P2=win_GetCtlHandle(_Win,idc_codigo), P3=win_GetCtlHandle(_Win,idc_nombre), mat(revista(A,B,D)), str_int(AA,A), win_settext(P1,AA), win_settext(P2,B), win_settext(P3,D), retract(mat(revista(A,B,D))), retract(mat(revista(A,B,D))), !. %end create

    9.- Cdigo para modificar botn guardar y salir del dialog modificar libro.

    %BEGIN mod_libro, idc_ok _CtlInfo dlg_mod_libro_eh(_Win,e_Control(idc_ok,_CtrlType,_CtrlWin,_CtlInfo),0):-!, P1=win_GetCtlHandle(_Win,idc_nombre), P2=win_GetCtlHandle(_Win,idc_codigo), P3=win_GetCtlHandle(_Win,idc_dia), P4=win_GetCtlHandle(_Win,idc_mes), P5=win_GetCtlHandle(_Win,idc_ao), P6=win_GetCtlHandle(_Win,idc_nombre1), P7=win_GetCtlHandle(_Win,idc_paterno), P8=win_GetCtlHandle(_Win,idc_materno), A=win_GetText(P1), B=win_GetText(P2), D=win_GetText(P3), E=win_GetText(P4), F=win_GetText(P5), G=win_GetText(P6), H=win_GetText(P7), I=win_GetText(P8), %mat(libro(A,B,fe(D,E,F),aut(G,H,I))), str_int(D,DD), str_int(E,EE), str_int(F,FF), asserta(mat(libro(A,B,fe(DD,EE,FF),aut(G,H,I)))), win_Destroy(_Win), !. %END mod_libro, idc_ok _CtlInfo

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    27

    10.- Cdigo para modificar botn guardar y salir del dialog modificar Revista.

    %BEGIN mod_revista, idc_ok _CtlInfo dlg_mod_revista_eh(_Win,e_Control(idc_ok,_CtrlType,_CtrlWin,_CtlInfo),0):-!, P1=win_GetCtlHandle(_Win,idc_ejemplar), P2=win_GetCtlHandle(_Win,idc_codigo), P3=win_GetCtlHandle(_Win,idc_nombre), A=win_GetText(P1), B=win_GetText(P2), D=win_GetText(P3), str_int(A,AA), asserta(mat(revista(AA,B,D))), win_Destroy(_Win), !. %END mod_revista, idc_ok _CtlInfo

    F.- EJECUTAR LA APLICACION Y ELIMINAR COMPONENTES ADICIONALES

    Lo primero que se va a hacer ser eliminar los componentes que no son necesarios en la ejecucin de la aplicacin que se est tratando.

    Eliminacin de men emergente

    Para la eliminacin de los mens emergentes que no estn siendo utilizados se realizan los siguientes pasos:

    Dirigirse al botn men situado en la parte

    izquierda de la pantalla.

    Aparece un elemento llamado Task Men en el centro del Experto.

    Para borrar el men se debe ir eliminando

    los submen y el cdigo introducido automticamente por el sistema, para ello presionamos el botn Code Expert.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    28

    Aparece la figura situada en la parte izquierda de la pantalla, lo primero es dirigirse al Event Type, llamado Men.

    En la parte central aparece una lista de

    elementos que pertenecen al men principal, lo que nos interesa son aquellos que tienen Clusula asignada por el sistema, ya que se tendr que ir eliminando una por una.

    Por ejemplo, el elemento llamado

    id_file_exit posee cdigo ya que se habilitan los botones llamados Edit Clause y Delete Clause.

    Precisamente para borrar el cdigo

    perteneciente al submen, se presiona el botn Delete Clause.

    Terminado el paso anterior nos queda eliminar por completo los submen para ello se hace doble clic en el elemento del experto llamado Task Men, teniendo que aparecer la siguiente ventana:

    Lo que queda es eliminar cada uno de los submens situados en la parte central.

    Para eliminarlos presionamos

    solamente el botn Del, situado en la parte izquierda de la pantalla.

    Se hace lo mismo con cada uno de

    los tres elementos situados en la parte central.

    Ahora se crea dos mens que debieran aparecer de la siguiente forma:

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    29

    Aqu definimos los nombres de los mens, el primero de ellos tendr el nombre de id_file y el segundo id_help. El men id_file tendr a su vez tres sub-mens, los que ahora se detallan:

    id_file_abrir id_file_guardar id_file_exit

    El men id_help tendr a su vez un sub-men, el que ahora se detallan:

    id_help_about

    Por lo que debieran quedar de la siguiente manera:

    Sub-men id_file Sub-Men id_help

    La insercin de cdigo para los mens emergentes es de forma similar que los dems tipos de controles, como por ejemplo, Push Button. Radio Button, etc. La nica diferencia que en vez de ir a Control se selecciona la opcin Men en tipo de evento (Event Type), se puede apreciar mejor en la siguiente figura.

    Una vez agregada la clusula, con el botn Add Clause, se presiona el botn Edit Clause, para as poder ingresar el cdigo correspondiente a cada submen.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    30

    As se tiene el cdigo para id_file_abrir: %BEGIN Task Window, id_file_abrir task_win_eh(_Win,e_Menu(id_file_abrir,_ShiftCtlAlt),0):-!, consult("C:\libros.dat"),%abre un archivo en donde estarn los primero datos !. %END Task Window, id_file_abrir

    Cdigo para id_file_exit: %BEGIN Task Window, id_file_exit task_win_eh(Win,e_Menu(id_file_exit,_ShiftCtlAlt),0):-!, win_Destroy(Win), %cierra la aplicacin !. %END Task Window, id_file_exit

    Cdigo para id_file_guardar: %BEGIN Task Window, id_file_guardar task_win_eh(_Win,e_Menu(id_file_guardar,_ShiftCtlAlt),0):-!, save("C:\libros.dat"), %Graba las modificaciones hechas en el archivo libros.dat !. %END Task Window, id_file_guardar

    Cdigo para id_help_about: %BEGIN Task Window, id_help_about task_win_eh(Win,e_Menu(id_help_about,_ShiftCtlAlt),0):-!, dlg_about_dialog_Create(Win), % muestra el dialogo about_dialog !. %END Task Window, id_help_about

    Terminados correctamente con los pasos anteriores, se esta en condiciones de ejecutar nuestra aplicacin, para ello nos dirigimos a la barra de herramientas y presionamos el botn Run

    o simplemente presionamos la tecla F9. As el aspecto de la aplicacin en modo usuario es de la siguiente manera:

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    31

    G.- NUESTRA APLICACIN EJECUTANDOSE.

    1.- Ventana Principal.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    32

    2.- Agregando Libros.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    33

    3.- Modificando Libros

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    34

    4.- Ingresar Revistas.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    35

    5.- Modificar Revista.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    36

    6.- Guardar.

    Los datos ingresados se guardan en un archivo, libros.dat, para realizar esta accin nos vamos al menu MENU, para luego dar click en el submen GUARDAR.

    7.- Abrir

    Los datos guardados previamente se volvern a cargar despus de dar click en el submen ABRIR.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    37

    8.- Por ltimo y no menos importante el dialog ABOUT

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    38

    V.- DESARROLLO DEL PROGRAMA EN VISUAL PROLOG PARA TRABAJAR CON LISTAS

    El ingeniero a cargo del curso de inteligencia artificial pidi que se trabajara un programa que utilice listas en su implementacin, y para cubrir con las expectativas del ingeniero desarrollamos un programa que si bien es simple pues cumple con los requerimientos. El programa antes desarrollado es un tanto mas completo, consideramos una buena idea mostrar primero la aplicacin anterior, para mostrar cuan interesantes el lenguaje de programacin PROLOG y VISUAL PROLOG, ya que en el curso solo se han desarrollado programas de consola.

    1.- PRIMEROS PASOS.

    A.- DESARROLLANDO LA INTERFAZ

    En el desarrollo de la aplicacin anterior se comento detalladamente el proceso de creacin de cada uno de los botones, cajas de texto, etc. Por lo que ya no se volver a redundar en lo mismo y solo se especificarn los nombres para cada control.

    La primera caja de texto ser llamada idc_edicion1. La segunda caja de texto ser llamada idc_edicion2. El primer botn Insertar en Orden ser llamado idc_insertar_en_orden. El segundo botn Insertar al Final ser llamado idc_insertar_al_final. El tercer botn Insertar al Principio ser llamado idc_insertar_al_principio. El cuarto botn Borrar Uno ser llamado idc_borra1. El quinto botn Borrar Todos ser llamado idc_borrar_todos.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    39

    B.- AGREGANDO CODIGO A LA APLICACIN LISTAENTEROS. Luego insertaremos cdigo en el libros.pro, al inicio de todo el cdigo, como se hizo al inicio del presente proyecto, el cdigo a insertar ser el siguiente. /* PRINCIPIO de bloque de manejo de listas de enteros */ domains list=integer* facts - listainteger single l(list) facts - codigofuente single cfuente(STRING) single titulo(STRING) predicates insertarp(integer, list, list) insertarf(integer, list, list) insertaro(integer, list, list) borrar1(integer, list, list) borrart(integer, list, list) editar1(WINDOW) editar2(WINDOW) editar3(WINDOW) editar4(WINDOW) editar5(WINDOW) editar6(WINDOW) clauses cfuente(""). titulo(""). l([]). insertarp(E, L, [E|L]). insertarf(E, [], [E]):-!. insertarf(E, [X|Y], [X|Y2]):-insertarf(E, Y, Y2). insertaro(E, [], [E]):-!. insertaro(E, [X|Y], [X|LY]):-E>X, insertaro(E, Y, LY), !.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    40

    insertaro(E, [X|Y], [E|[X|Y]]):-E

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    41

    editar4(_Win):- M=win_GetCtlHandle(_Win, idc_edicion2), S=win_getText(M), str_int(S, E), l(L), insertarf(E, L, NL), assert(l(NL), listainteger),!. editar4(_):-dlg_Error ("Elemento errneo"). editar5(_Win):- M=win_GetCtlHandle(_Win, idc_edicion2), S=win_getText(M), str_int(S, E), l(L), borrar1(E, L, NL), assert(l(NL), listainteger),!. editar5(_):-dlg_Error ("Elemento errneo"). editar6(_Win):- M=win_GetCtlHandle(_Win, idc_edicion2), S=win_getText(M), str_int(S, E), l(L), borrart(E, L, NL), assert(l(NL), listainteger),!. editar6(_):-dlg_Error ("Elemento errneo"). B.- AGREGANDO CODIGO PARA LOS BOTONES. 1.- Para idc_agregar_en_orden. dlg_listaenteros_eh(_Win,e_Control(idc_insertar_en_orden,_CtrlType,_CtrlWin,_CtlInfo),0):-!, editar2(_Win), editar1(_Win), !. 2.- para idc_agregar_al_final.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    42

    dlg_listaenteros_eh(_Win,e_Control(idc_insertar_al_final,_CtrlType,_CtrlWin,_CtlInfo),0):-!, editar4(_Win), editar1(_Win), !. 3.- para idc_insertar_al_principio. dlg_listaenteros_eh(_Win,e_Control(idc_insertar_al_principio,_CtrlType,_CtrlWin,_CtlInfo),0):-!, editar3(_Win), editar1(_Win), !. 4.- para idc_borrar1 dlg_listaenteros_eh(_Win,e_Control(idc_borra1,_CtrlType,_CtrlWin,_CtlInfo),0):-!, editar5(_Win), editar1(_Win), !. 5.- para idc_borrar_todos. dlg_listaenteros_eh(_Win,e_Control(idc_borrar_todos,_CtrlType,_CtrlWin,_CtlInfo),0):-!, editar6(_Win), editar1(_Win), !. C.- EJECUTANDO LA APLICACIN.

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    43

  • PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

    Pg.

    44

    VI.- CONCLUSIONES.

    Se logro comprender la programacin visual y orientado a eventos de aplicaciones desarrolladas con visual prolog.

    Se logro aprender la forma de interactuar y manipular elementos visuales que incluye Visual Prolog.

    El presente proyecto se ha logrado desarrollar con xito, permitindonos tener un amplio conocimiento sobre base de datos, manejos de botones, listas, radiobuttons, etc.

    El presente proyecto se ha desarrollado con la intensin de que sirva como ayuda en la programacin de prolog para los aos inferiores.

    VII.- RECOMENDACINES.

    Recomendamos se facilite la informacin contenida en el presente documento a los alumnos de aos inferiores.

    De igual manera se recomienda mostrar las aplicaciones con una interfaz grfica, para hacer ms llamativo el lenguaje de programacin, los programas que se muestran solo en consola como si fuese D.O.S son aburridos y tediosos.

    VIII.- BIBLIOGRAFIA.

    1.- http://www.programatium.com/prolog.htm#3.

    2.- http://www.programacion.com/tutorial/prolog3/.

    3.- http://www.programacion.com/tutoriales/prolog/.

    4.- http://www.dsic.upv.es/~jsilva/fin/idr/transparencias2.pdf.

    5.- http://www.dsic.upv.es/~jsilva/fin/idr/transparencias3.ppt.

    6.- http://www.dsic.upv.es/~jsilva/fin/idr/transparencias4.ppt.