Proyecto Prolog PDF

April 18, 2017 | Author: ebudhy | Category: N/A
Share Embed Donate


Short Description

Download Proyecto Prolog PDF...

Description

UNIVERSIDAD NACIONAL DE CAJAMARCA

VISUAL

2008 PROYECTO DE INTELIGENCIA ARTIFICIAL

INTEGRANTES CASTAÑEDA AQUINO ALEX CHONON BARRANTES DENIS HUMAN CRUZADO JEINER PALOMINO CORREA JUBERTH PUMACCAJIA TASILLA JAVIER

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

INDICE Título I.- INTRODUCCIÓN II.- OBJETIVOS. III.- MARCO TEÓRICO. A.- Prolog y el Lenguaje de la Lógica de Primer Orden A.1. Predicados A.2. Términos B. Estructura de un Programa IV.- DESARROLLO DE LA APLICACIÓN. A.- Configurando Opciones Básicas Del Proyecto. B.- Diseño De La Ventana Principal. C.- Diseño De Ventanas De Tipo Dialog D.- Insertar Codigo De Los Dialog Al Programa Principal. E.- Insertar Código En El Programa Principal. F.- Ejecutar La Aplicacion Y Eliminar Componentes Adicionales G.- Nuestra Aplicación Ejecutandose. V.- DESARROLLO DEL PROGRAMA EN VISUAL PROLOG PARA TRABAJAR CON LISTAS VI.- CONCLUSIONES. VII.- RECOMENDACIÓNES. VIII.- BIBLIOGRAFIA

Pág. 2

Página 03 03 04 04 04 04 05 06 06 09 10 14 15 27 31 38 44 44

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

I.- INTRODUCCIÓN

En el presente proyecto pretendemos mostrar en profundidad las nuevas herramientas con los que cuenta visual prolog, como por ejemplo botones de selección, edición en cuadros de listas, llamado a otro tipo de ventanas, etc. Dichas herramientas nos permitirán contruir aplicaciones cada vez más complicadas y robuscas, con interfaces visuales atractivas, y no las típicas 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 Programación 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 selección, cuadros de listas, menús, 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 también con una interfaz gráfica tan igual como si se tratase de cualquier otro ID de programación.

Pág. 3

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 III.- MARCO TEÓRICO. En presente marco teórico no pretende abarcar todo lo referente al lenguaje PROLOG y mucho menos a todas las funciones contenidas en VISUAL PROLOG sino más bien pretende dar un acercamiento al PROLOG. A.- PROLOG Y EL LENGUAJE DE LA LÓGICA DE PRIMER ORDEN La Lógica de Primer Orden analiza las frases sencillas del lenguaje (fórmulas atómicas o elementales) separándolas en Términos y Predicados. Los términos hacen referencia a los objetos que intervienen y los predicados a las propiedades o relaciones entre estos objetos. Además, dichas fórmulas atómicas se pueden combinar mediante Conectivas permitiéndonos construir fórmulas más complejas, llamadas fórmulas moleculares. A.1. PREDICADOS Se utilizan para expresar propiedades de los objetos, predicados monádicos, y relaciones entre ellos, predicados poliádicos. En Prolog los llamaremos hechos. Debemos tener en cuenta que:  Los nombres de todos los objetos y relaciones deben comenzar con una letra minúscula.  Primero se escribe la relación o propiedad: predicado  Y los objetos se escriben separándolos mediante comas y encerrados entre paréntesis: argumentos.  Al final del hecho debe ir un punto ("."). A.2. TÉRMINOS Los términos pueden ser constantes o variables, y suponemos definido un dominio no vacío en el cual toman valores (Universo del Discurso). En la práctica se toma como dominio el Universo de Herbrand. Para saber cuántos individuos del universo cumplen una determinada propiedad o relación, cuantificamos los términos. Las constantes se utilizan para dar nombre a objetos concretos del dominio, dicho de otra manera, representan individuos conocidos de nuestro Universo. Además, como ya hemos dicho, las constantes atómicas de Prolog también se utilizan para representar propiedades y relaciones entre los objetos del dominio. Hay dos clases de constantes: Átomos: existen tres clases de constantes atómicas:  Cadenas de letras, dígitos y subrayado (_) empezando por letra minúscula. Pág. 4

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008  Cualquier cadena de caracteres encerrada entre comillas simples (').  Combinaciones especiales de signos: "?-", ":-", ... Números: se utilizan para representar números de forma que se puedan realizar operaciones aritméticas. Dependen del ordenador y la implementación. - Enteros: en la implementación 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 continuación, si se hacen las preguntas adecuadas, Prolog buscará las respuestas en dicho Universo y las presentará en la pantalla. La programación 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. Ejecución del programa: Demostración de un Teorema en este Universo, es decir, demostración de que una conclusión se deduce de las premisas (afirmaciones previas).

Un sistema Prolog está basado en un comprobador de teoremas por resolución para cláusulas de Horn. La regla de resolución no nos dice que cláusulas elegir ni que literales unificar dentro de cada cláusula. La estrategia de resolución particular que utiliza Prolog es una forma de resolución de entrada lineal (árbol de búsqueda estándar). Para la búsqueda de cláusulas 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 cláusulas (hechos y reglas) de un determinado procedimiento es importante en Prolog, ya que determina el orden en que las soluciones serán encontradas, e incluso puede conducir a fallos en el programa. Más importante es, si cabe, el orden de las metas a alcanzar dentro del cuerpo de una regla. Pág. 5

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 IV.- DESARROLLO DE LA APLICACIÓN. A.- CONFIGURANDO OPCIONES BASICAS DEL PROYECTO. Para ejecutar Visual Prolog, nos dirigimos al menú inicio, una vez dentro realizamos lo siguiente:  

Presionamos la opción New Project del menú Project. El dialogo que aparece nos permite configurar el método de desarrollo de la aplicación en curso de una forma muy sencilla. 1.

Pestaña General

En esta pestaña se identifican el nombre del proyecto y el directorio en el cual va a estar situada nuestra aplicación. En el caso de nuestro proyecto el nombre del proyecto será Libros y el directorio base será un directorio nuevo y vacío, es recomendable tener cada proyecto con cada directorio distinto.

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

Pág. 6

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 3. Pestaña VPI Options En esta pestaña 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 aplicación 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 aplicación como botones, cuadros de edición, botones de selección, 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 aplicación van a ser visto en modo tridimensional. Toolbar and Help Line: determina si la aplicación tendrá una barra de herramientas y una línea 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 programación Visual y no escribir ni leer como si fuera por DOS.

4. Pestaña User Info Aquí se especifican datos, como por ejemplo, el nombre de la compañía, el nombre del autor, la versión de nuestra aplicación y una breve descripción de nuestro programa.

Pág. 7

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

Figura: Aspecto de creación de ejemplo Libros En el cuadro de arriba se ven diferentes pestañas que pertenecen al dialogo de creación de la aplicación, la configuración de ellas van directamente ligadas a como queremos representar nuestro programa. Las pestañas restantes Other Options y Help Maker se deben dejar tal como están, ya que son especificaciones para construir aplicaciones mas avanzadas, como por ejemplo, conectividad con base de datos, cambiar el generador de código, etc. 

Terminados estos pasos presionamos el botón Create momento en que nuestra aplicación 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 aplicación. 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 deberán ser borrados ya que verán afectado el normal funcionamiento de la aplicación. En la parte derecha aparecen los botones que nos permiten editar y eliminar componentes que fueron anteriormente añadidos, así como también acceder a la ventana del código experto que nos permite insertar código fácilmente a nuestra aplicación.

Pág. 8

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 B.- DISEÑO DE LA VENTANA PRINCIPAL. Una vez terminados todos los pasos anteriores de manera exitosa lo que nos interesa es empezar a diseñar 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 fácil y rápida la aplicación Libros es realizando los siguientes pasos: Dirigirse al botón situado en la parte izquierda llamado Window que nos mostrara todas las ventanas actuales que existen en el programa, cómo 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 diseño 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 aplicación tendrá el siguiente aspecto tras haber pegado los controles adecuados, después de la figura de abajo se especifican los nombres con que fueron identificados para luego ocuparlos en el código principal.

Pág. 9

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 Los controles que son identificados son aquellos que nos permitirán interactuar al usuario con el sistema y no aquellos que solamente cumplan con la función de proporcionar información, como por ejemplo, una etiqueta estática.

Radio Button List Box

Static Text Push Button

El aspecto de nuestra Task Window deberá ser como la imagen de arriba. La identificación 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 código para poder diferenciarlos. C.- DISEÑO DE VENTANAS DE TIPO DIALOG Un paso nuevo en este proyecto es la creación de ventanas tipo Dialog, la cualidad de trabajar con este tipo de ventanas es que liberan de carga a la ventana principal (Task Window).

Pág.

10

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 Para empezar a diseñar las diferentes ventanas tipo dialog se realiza los siguientes pasos:  Se hacemos clic en el botón 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 aplicación que se cree posteriormente. Esta ventana identifica el tipo de autor, la versión del programa, etc., datos que fueron entregados por el creador del programa en la pestaña User Info durante la creación del proyecto. Lo que interesa es crear ventanas nuevas e incorporarlas a la aplicación, para ello se presiona el botón 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 botón Ok, para así poder insertar elementos a nuestra ventana Dialog. Debería aparecer la siguiente ventana con tres Push Button llamados, OK, Cancel y Help. Pág.

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 código:     

El primer Edit Control será llamado idc_nombre. El segundo Edit Control será llamado idc_codigo. Los Edit Control de la fecha serán llamados idc_dia, idc_mes, idc_año. Los Edit Control del autor serán llamados idc_nombre1, idc_paterno, idc_materno. Los Push Button serán llamados idc_ok (Guardar), idc_cancel (Salir).

Para la aplicación 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 creación no se volverá a repetir, solamente se mostrarán las ventanas con sus nombres para identificarlas después en el código. Pág.

12

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

Edit Control

Push Button

Los nombres que tendrán los controles serán los siguientes para esta ventana:   

Los Edit Control de los datos del libro serán llamados idc_libro, idc_codigo, idc_dia, idc_mes, idc_año. Los Edit Control de los datos del autor serán 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 tendrán los controles serán los siguientes para esta ventana:  

Pág.

13

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

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

Edit Control

Push Button

Los nombres que tendrán los controles serán los siguientes para esta ventana:  

Los Edit Control serán llamados idc_ejemplar, idc_codigo, idc_nombre. Los Push Button serán 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 botón para llamar a la ventana dialog Libro, se agregaría el código necesario para hacerlo, pero en el momento de la ejecución marcaría 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 código para cada ventana que se haya creado con anterioridad. Los pasos para insertar el código de cada ventana al programa principal son los siguientes: 

Se presiona el botón 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 código.



Luego se presiona el botón Code Expert situado en la parte derecha de la figura.

Aparecerá la siguiente ventana en la cual se puede agregar definitivamente el código.

Pág.

14

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 En esta ventana se especifican los argumentos necesarios para una correcta inserción del código 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 código, que será el nombre del proyecto con extensión .pro.



El estilo de dialog_Create().



El tipo de evento debe ser Window.



Por último el Evento debe ser e_Create.



Una vez que estén bien y chequeados correctamente los pasos anteriores, se presiona el botón Default Code, situado en la parte derecha de la figura.



Una vez presionado el botón Default Code, presionamos el botón Ok.

código

debe

ser

De manera similar realizamos el proceso de inserción de código para los tres diálogos restantes, los cuales son: revista, mod_revista, mod_libro. E.- INSERTAR CÓDIGO EN EL PROGRAMA PRINCIPAL. Al momento de la creación de un programa Visual Prolog crea 2 archivos (como se dijo anteriormente). Cada uno de los cuales contiene código que sirve para la ejecución de un programa en particular, el código que se insertara deberá hacerse con mucho cuidado ya que modificar dicho código puede significar que la aplicación no correrá y darse cuenta donde esta el error es algo difícil de encontrar. Antes de insertar código para los botones, se tiene que crear los dominios para poder hacer funcionar nuestra aplicación con bases de datos, definiendo diferentes tipos de dominios.

Pág.

15

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 Primero se va a definir los tipos de dominios y los tipos de datos que tendrá la aplicación. 

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



Luego se presiona el botón Edit que nos mostrara el código de todo el proyecto.

Se definirá los siguientes tipos de datos en la parte principal del código 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 inserción, modificación y eliminación de datos. El siguiente paso es insertar o agregar el código para los controles de la Task Window. Recordando un poco la Task Window tiene el siguiente aspecto:

Pág.

16

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 La inserción de código para los radio button: se explicará el ingreso de código para el primer radiobuton, y luego seguir el mismo procedimiento para el segundo radio button. Para ello se presiona el botón 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 botón Add Clause, para luego así poder editar la cláusula que da por defecto el sistema. El código 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 código 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 continuación se detallan la explicación 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 parámetro checkbox_off permite no chequear el control.

Estas instrucciones permiten diferenciar, si se tratarán los libros o las revistas. El siguiente paso es ingresar el código para los Push Button, el proceso de inserción de condigo es similar a la anterior, por lo cual solamente se mostrará el Pág.

17

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 código para que funcionen de acuerdo a las necesidades que se planteaban al comenzar el proyecto. 1.- Código 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 explicación para las instrucciones se detalla a continuación:    

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.- Código para el segundo Push Button llamado idc_modificar. Este botón 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 instrucción lbox_GetSelIndex, luego se implementa la instrucción lbox_GetItem, la cual devuelve el elemento seleccionado como un solo string. Lo extenso del código se explica por que se debe separar el string obtenido en los campos que conforman la base de datos. Nota: Cómo no existe una instrucción modificar, la implementación de esta se hace eliminando el elemento seleccionado, para luego volver a agregarlo pero modificado.

Pág.

18

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 %BEGIN Task Window, idc_modificar _CtlInfo %Código para la edición 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 selección 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 posición 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), %año searchstring(S5," ",A61), str_len(S5,Largo5), A62=A61-1, A63=A61+5, L5=Largo5-A61-4, substring(S5,1,A62,K9),

Pág.

19

Todas estas instrucciones sirven para ir separando el elemento seleccionado en la lista y dejarlo en varias

Es la continuación para los datos que conforman la parte de libros de nuestra base de datos.

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 continuación 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 instrucción 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í después poder eliminarlos. dlg_mod_libro_create(_Win),!; %Código para la edición 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 instrucción para separar los datos de acuerdo al %formato de la base de datos. dlg_mod_revista_create(_Win),!; %Envía en mensaje de advertencia si no se ha seleccionado ningún elemento. dlg_Note("Modificar","Debe Seleccionar Algún Elemento de la Lista"),!. %END Task Window, idc_modificar _CtlInfo

Pág.

20

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 El largo del código para esta cláusula es por que en Prolog no hay una instrucción 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 modificación de datos.

3.- Código para el tercer Push Button llamado idc_eliminar. Este botón 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 instrucción lbox_GetSelIndex, luego se implementa la instrucción lbox_GetItem, la cual devuelve el elemento seleccionado como un sólo 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 opción 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), %Código 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 Todas estas instrucciones searchstring(S3,"/",A41), str_len(S3,Largo3), sirven para ir separando el A42=A41-1, A43=A41+1, elemento seleccionado en la L3=Largo3-A41, substring(S3,1,A42,K5), lista y dejarlo en varias 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,

Pág.

21

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 substring(S4,1,A52,K7), substring(S4,A53,L4,S5), str_int(K7,K8), %año 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 instrucción 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 opción 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),

Pág.

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 instrucción 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 !; %Envía en mensaje de advertencia si no se ha seleccionado ningún elemento. dlg_Note("Eliminar","Debe Seleccionar Algún Elemento de la Lista"), !. %END Task Window, idc_eliminar _CtlInfo

El proceso de eliminación, 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 están seleccionadas las opciones Libro o Revista entrega un mensaje al usuario de que Debe Seleccionar Algún elemento de la Lista. 4.- Código 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 separación 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 opción 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), datos de la base concat(P1,P2,P3), de datos, y los concat(DD,"/",P4), muestra en la concat(MM,"/",P5), 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.

Pág.

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; %Envía 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 diálogos 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_año), 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

Pág.

24

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 6.- código 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_año), 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

Estas instrucciones van puestas en la creación de la ventana mod_libro y sirven para complementar la idea de implementar la instrucción 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.

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

Pág.

25

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 8.- Código 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.- Código para modificar botón 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_año), 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

Pág.

26

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 10.- Código para modificar botón 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 ADICIONALES

APLICACION

Y

ELIMINAR

COMPONENTES

Lo primero que se va a hacer será eliminar los componentes que no son necesarios en la ejecución de la aplicación que se está tratando. Eliminación de menú emergente Para la eliminación de los menús emergentes que no están siendo utilizados se realizan los siguientes pasos:  Dirigirse al botón 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 código introducido automáticamente por el sistema, para ello presionamos el botón Code Expert.

Pág.

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 Cláusula asignada por el sistema, ya que se tendrá que ir eliminando una por una.



Por ejemplo, el elemento llamado id_file_exit posee código ya que se habilitan los botones llamados Edit Clause y Delete Clause.



Precisamente para borrar el código perteneciente al submenú, se presiona el botón 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 submenús situados en la parte central.



Para eliminarlos presionamos solamente el botón 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 menús que debieran aparecer de la siguiente forma:

Pág.

28

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 Aquí definimos los nombres de los menús, 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-menús, 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 inserción de código para los menús emergentes es de forma similar que los demás tipos de controles, como por ejemplo, Push Button. Radio Button, etc. La única diferencia que en vez de ir a Control se selecciona la opción Menú en tipo de evento (Event Type), se puede apreciar mejor en la siguiente figura.



Pág.

29

Una vez agregada la cláusula, con el botón Add Clause, se presiona el botón Edit Clause, para así poder ingresar el código correspondiente a cada submenú.

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 Así se tiene el código 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 estarán los primero datos !. %END Task Window, id_file_abrir

Código 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 aplicación !. %END Task Window, id_file_exit

Código 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

Código 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 aplicación, para ello nos dirigimos a la barra de herramientas y presionamos el botón Run

o simplemente presionamos la tecla F9. Así el aspecto de la aplicación en modo usuario es de la siguiente manera:

Pág.

30

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 G.- NUESTRA APLICACIÓN EJECUTANDOSE. 1.- Ventana Principal.

Pág.

31

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 2.- Agregando Libros.

Pág.

32

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 3.- Modificando Libros

Pág.

33

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008

4.- Ingresar Revistas.

Pág.

34

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 5.- Modificar Revista.

Pág.

35

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 6.- Guardar. Los datos ingresados se guardan en un archivo, libros.dat, para realizar esta acción nos vamos al menu MENU, para luego dar click en el submenú GUARDAR.

7.- Abrir Los datos guardados previamente se volverán a cargar después de dar click en el submenú ABRIR.

Pág.

36

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

Pág.

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 implementación, 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 aplicación anterior, para mostrar cuan interesantes el lenguaje de programación 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 aplicación anterior se comento detalladamente el proceso de creación 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 especificarán 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 botón “Insertar en Orden” será llamado idc_insertar_en_orden. El segundo botón “Insertar al Final” será llamado idc_insertar_al_final. El tercer botón “Insertar al Principio” será llamado idc_insertar_al_principio. El cuarto botón “Borrar Uno” será llamado idc_borra1.  El quinto botón “Borrar Todos” será llamado idc_borrar_todos.

Pág.

38

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 B.- AGREGANDO CODIGO A LA APLICACIÓN LISTAENTEROS. Luego insertaremos código en el libros.pro, al inicio de todo el código, como se hizo al inicio del presente proyecto, el código 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), !. Pág.

39

PROYECTO DE INTELIGENCIA ARTIFICIAL 2008 insertaro(E, [X|Y], [E|[X|Y]]):-E
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF