You are on page 1of 44

UNIVERSIDAD NACIONAL DE CAJAMARCA

VISUAL

2008
PROYECTO DE INTELIGENCIA
ARTIFICIAL

INTEGRANTES
CASTAEDA AQUINO ALEX
CHONON BARRANTES DENIS
HUMAN CRUZADO JEINER
PALOMINO CORREA JUBERTH
PUMACCAJIA TASILLA JAVIER
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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 38
PARA TRABAJAR CON LISTAS
VI.- CONCLUSIONES. 44
VII.- RECOMENDACINES. 44
VIII.- BIBLIOGRAFIA

Pg. 2
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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.

Pg. 3
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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.

Pg. 4
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg. 5
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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.

Pg. 6
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg. 7
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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.

Pg. 8
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg. 9
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Radio Button
List Box

Static Text
Push Button

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

Pg.
10
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg.
11
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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:

Push Button

Edit Control

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.

Pg.
12
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
1.- Segunda Ventana tipo Dialog (llamada Mod_Libro)

Edit Control

Push Button

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)

Edit Control

Push Button

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.

Pg.
13
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
3.- Cuarta Ventana tipo Dialog (llamado Revista)

Edit Control

Push Button

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.

Pg.
14
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg.
15
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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:

Pg.
16
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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

Pg.
17
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg.
18
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
%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 Todas estas instrucciones
%K3 caracteres.
substring(S,A3,L1,S2), sirven para ir separando el
%Codigo
searchstring(S2," ",A21), elemento seleccionado en la
str_len(S2,Largo2),
A22=A21-1, lista y dejarlo en varias
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 Es la continuacin para los
searchstring(S4,"/",A51),
str_len(S4,Largo4), datos que conforman la
A52=A51-1,
A53=A51+1, parte de libros de nuestra
L4=Largo4-A51,
substring(S4,1,A52,K7), base de datos.
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),

Pg.
19
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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, Es la continuacin para los
substring(S6,1,A72,K11),
substring(S6,A73,L6,S7), datos que conforman la
%paterno autor
searchstring(S7," ",A81), parte de libros de nuestra
str_len(S7,Largo7),
A82=A81-1, base de datos.
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

Pg.
20
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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), Todas estas instrucciones
str_len(S3,Largo3),
A42=A41-1, sirven para ir separando el
A43=A41+1,
L3=Largo3-A41, elemento seleccionado en la
substring(S3,1,A42,K5),
substring(S3,A43,L3,S4), lista y dejarlo en varias
str_int(K5,K6),
%mes
searchstring(S4,"/",A51),
str_len(S4,Largo4),
A52=A51-1,
A53=A51+1,
L4=Largo4-A51,

Pg.
21
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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 Todas estas instrucciones
searchstring(S6," ",A71),
str_len(S6,Largo6), sirven para ir separando el
A72=A71-1,
A73=A71+5, elemento seleccionado en la
L6=Largo6-A71-4,
substring(S6,1,A72,K11), lista y dejarlo en varias
substring(S6,A73,L6,S7),
%paterno autor variables, como en el
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, Se separa el elemento
A12=A+5,
L1=Largo-A-4, seleccionado en varias
substring(S,1,A11,K1),
substring(S,A12,L1,S2),
str_int(K1,K2),
%Ejemplar
searchstring(S2," ",A21),
str_len(S2,Largo2),

Pg.
22
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
A22=A21-1, Se separa el elemento seleccionado en
A31=A21+5,
L2=Largo2-A21-4, varias variables, como en el caso de los
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.
Junta todos los
concat(B," ",P2),
concat(P1,P2,P3), datos de la base
concat(DD,"/",P4), de datos, y los
concat(MM,"/",P5), muestra en la
concat(P4,P5,P6), lista como un
concat(AA," ",P7), solo string.
concat(N," ",P8),
concat(P7,P8,P9),
concat(Ap1," ",P10),
concat(Ap2," ",P11), Luego se hace
concat(P10,P11,P12),
lo mismo pero
concat(P3,P6,P13),
con las revistas.
Pg.
23
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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
Pg.
24
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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), Estas instrucciones van
P6=win_GetCtlHandle(_Win,idc_nombre1), puestas en la creacin de la
P7=win_GetCtlHandle(_Win,idc_paterno), ventana mod_libro y sirven
P8=win_GetCtlHandle(_Win,idc_materno), para complementar la idea
%Consulta en la base de datos de implementar la
mat(libro(A,B,fe(D,E,F),aut(G,H,I))), instruccin modificar ya que
%Asigna el texto a los EditText rescata los datos de la base,
win_settext(P1,A), los muestra en pantalla y
win_settext(P2,B), luego los elimina, para que
str_int(DD,D), puedan ser grabados y
win_settext(P3,DD), queden solo una vez en la
str_int(EE,E), base de datos.
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

Pg.
25
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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

Pg.
26
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg.
27
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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:

Pg.
28
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg.
29
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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:

Pg.
30
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
G.- NUESTRA APLICACIN EJECUTANDOSE.

1.- Ventana Principal.

Pg.
31
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
2.- Agregando Libros.

Pg.
32
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
3.- Modificando Libros

Pg.
33
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

4.- Ingresar Revistas.

Pg.
34
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
5.- Modificar Revista.

Pg.
35
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg.
36
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
8.- Por ltimo y no menos importante el dialog ABOUT

Pg.
37
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.

Pg.
38
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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), !.

Pg.
39
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
insertaro(E, [X|Y], [E|[X|Y]]):-E<X, !.
insertaro(_,L,L). /* Cuando intentamos meter un elemento repetido */

borrar1(_, [], []):-!.


borrar1(E, [E|Y], Y):-!.
borrar1(E, [X|Y], [X|LY]):-borrar1(E, Y, LY).

borrart(_, [], []):-!.


borrart(E, [E|Y], LY):-borrart(E, Y, LY), !.
borrart(E, [X|Y], [X|LY]):-borrart(E, Y, LY).

/* FIN de bloque de manejo de listas de enteros */

/* Manejo de las cajas de edicion */

editar1(_Win):-
M=win_GetCtlHandle(_Win, idc_edicion1),
l(L),
term_str (list, L, S),
win_setText(M, S).

editar2(_Win):-
M=win_GetCtlHandle(_Win, idc_edicion2),
S=win_getText(M),
str_int(S, E),
l(L),
insertaro(E, L, NL),
assert(l(NL), listainteger),!.

editar2(_):-dlg_Error ("Elemento errneo").

editar3(_Win):-
M=win_GetCtlHandle(_Win, idc_edicion2),
S=win_getText(M),
str_int(S, E),
l(L),
insertarp(E, L, NL),
assert(l(NL), listainteger),!.
editar3(_):-dlg_Error ("Elemento errneo").

Pg.
40
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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,_CtlInf
o),0):-!,
editar2(_Win),
editar1(_Win),
!.

2.- para idc_agregar_al_final.


Pg.
41
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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,_Ctl
Info),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.


Pg.
42
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

Pg.
43
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

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.

Pg.
44

You might also like