Professional Documents
Culture Documents
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
II.- OBJETIVOS.
Comprender la Programacin visual y orientado a eventos con 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
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
Los nombres de todos los objetos y relaciones deben comenzar con una
letra minscula.
A.2. 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:
Pg. 4
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
Cualquier cadena de caracteres encerrada entre comillas simples (').
Combinaciones especiales de signos: "?-", ":-", ...
B. ESTRUCTURA DE UN PROGRAMA
Pg. 5
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
Para ejecutar Visual Prolog, nos dirigimos al men inicio, una vez dentro
realizamos lo siguiente:
1. Pestaa General
2. Pestaa Target
Pg. 6
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
3. Pestaa VPI Options
Pg. 7
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
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.
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:
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
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.
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.
Push Button
Edit Control
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.
Edit Control
Push Button
Los nombres que tendrn los controles sern los siguientes para esta ventana:
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:
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:
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.
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.
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)
Por ltimo la base de datos ser llamada mat, para todos los efectos de insercin,
modificacin y eliminacin de datos.
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.
Pg.
17
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
cdigo para que funcionen de acuerdo a las necesidades que se planteaban al
comenzar el proyecto.
Lo extenso del cdigo se explica por que se debe separar el string obtenido en
los campos que conforman la base de datos.
Pg.
18
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
%BEGIN Task Window, idc_modificar _CtlInfo
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.
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
!;
%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),
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.
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.
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.
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),
!.
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.
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.
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:
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.
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.
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
Pg.
30
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
G.- NUESTRA APLICACIN EJECUTANDOSE.
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
Pg.
34
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
5.- Modificar Revista.
Pg.
35
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
6.- Guardar.
7.- 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
Pg.
38
PROYECTO DE INTELIGENCIA ARTIFICIAL 2008
B.- AGREGANDO CODIGO A LA APLICACIN LISTAENTEROS.
domains
list=integer*
facts - listainteger
single l(list)
facts - codigofuente
single cfuente(STRING)
single titulo(STRING)
predicates
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 */
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),!.
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").
dlg_listaenteros_eh(_Win,e_Control(idc_insertar_en_orden,_CtrlType,_CtrlWin,_CtlInf
o),0):-!,
editar2(_Win),
editar1(_Win),
!.
dlg_listaenteros_eh(_Win,e_Control(idc_insertar_al_final,_CtrlType,_CtrlWin,_CtlInfo
),0):-!,
editar4(_Win),
editar1(_Win),
!.
dlg_listaenteros_eh(_Win,e_Control(idc_insertar_al_principio,_CtrlType,_CtrlWin,_Ctl
Info),0):-!,
editar3(_Win),
editar1(_Win),
!.
dlg_listaenteros_eh(_Win,e_Control(idc_borra1,_CtrlType,_CtrlWin,_CtlInfo),0):-!,
editar5(_Win),
editar1(_Win),
!.
dlg_listaenteros_eh(_Win,e_Control(idc_borrar_todos,_CtrlType,_CtrlWin,_CtlInfo),0)
:-!,
editar6(_Win),
editar1(_Win),
!.
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.
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