Manual SWI Prolog - Interfaces Graficas
Manual SWI Prolog - Interfaces Graficas
Manual SWI Prolog - Interfaces Graficas
UNIVERSIDAD NACIONAL DE TRUJILLO
ESCUELA DE INFORMATICA
SWI PROLOG
Interfaces Graficas
Gustavo Alexander Alvarez Alvarez
UNIVERSIDAD NACIONAL DE TRUJILLO 2
SWI PROLOG
1. INSTALAR SWI PROLOG
Si aun no instalas el SWI Prolog en tu PC, descárgalo desde su Portal Web: http://www.swi‐
prolog.org/index.html
Dirígete al área de Descarga, y selecciona Stable release, para poder descargar la versión
actual y estable (actual 5.6x).
Selecciona el SO con el que trabajaras SWI Prolog
UNIVERSIDAD NACIONAL DE TRUJILLO 3
SWI PROLOG
También Descarga el Editor Grafico, dirígete al área IDE, y selecciona SWI‐Prolog‐Editor
Y procede a descargarlo.
UNIVERSIDAD NACIONAL DE TRUJILLO 4
SWI PROLOG
Instala primero SWI Prolog: w32pl5664.exe
Luego descomprime Editor de SWI Prolog e instálalo: setup.zip ‐> setup.exe
Al final de instalar tendrás el editor y el compilador:
Si luego de instalar el editor no carga con el lenguaje castellano (el que usaremos), ve a menu
ventana/ configuración, aparecerá una ventana de configuración y en la pestaña Opciones ve
al botón Translate y busca la ruta del archivo español.ini (debe de estar en la carpeta de
instalación del Editor) y selecciónalo.
UNIVERSIDAD NACIONAL DE TRUJILLO 5
SWI PROLOG
2. GRAFICOS EN SWI‐PROLOG
Se hace uso de la librería XPCE, la cual ha sido desarrollada para el desarrollo en GUI Prolog
desde el principio.
XPCE ha escrito una dinámica orientada a objetos del núcleo. Métodos se puede definir en
cualquier idioma. XPCE predefine un gran número de clases, destinado a la representación de
datos, así como gráficos. La biblioteca gráfica permite resumen descripción de componentes
de la interfaz y es portátil para Win32 y Unix/X11.
XPCE es un conjunto de herramientas para el desarrollo de aplicaciones gráficas en Prolog e
interactiva. XPCE y no sigue un enfoque único de la GUI para el desarrollo de aplicaciones,
que se intentara resumir con los puntos a continuación.
3. CARGAR LA LIBRERÍA XPCE
Para poder usar predicados para trabajar con gráficos bajo SWI Prolog deberemos cargar la
librería XPCE. Para cargar dicha librería pondremos la siguiente línea en cualquier parte del
archivo (preferiblemente al principio del mismo):
Esta línea lo que hace es decirle a Prolog que cargue la librería una vez ha terminado de
compilar, antes que el prompt de Prolog se nos deje hacer ninguna consulta.
Una vez cargada esta librería, ya disponemos de una serie de predicados para poder crear
ventanas, botones,... y una gran variedad de objetos.
4. CREAN NUESTRO PRIMER OBJETO
Con la librería PCE se trabaja con un esquema orientado a objetos, donde podremos crear
clases y trabajar con diferentes objetos, pudiendo llamar a métodos de dichos objetos
(pasándoles los correspondientes parámetros) o llamar a métodos que nos devuelvan algún
valor, y obviamente si creamos objetos, también podremos destruirlos.
Así pues principalmente existen 4 predicados con los que se puede trabajar con XPCE/Prolog.
Estos predicados sirven para crear objetos, enviar mensajes a objetos, recibir mensajes de
objetos y liberar la memoria de los objetos. Estos 4 predicados son:
• New(?Reference, +NewTerm): Este predicado recoge dos parámetros, e primero
recogería la referencia que se le asigna al nuevo objeto, ya que new se usa para
crear objetos. El segundo parámetro le indicaría el objeto que se quiere crear.
• send(?Receiver, +Selector(...Args...)): El primer parámetro del predicado es una
referencia al objeto al que deseemos enviarle un mensaje. El segundo parámetro
UNIVERSIDAD NACIONAL DE TRUJILLO 6
SWI PROLOG
indicará el método al que queremos invocar, lo cual indicaremos junto a los
argumentos que queremos enviarle al método.
• get(?Receiver, +Selector(+Argument...), ‐Result): Los dos primeros parámetros
tienen el mismo significado que para send, sin embargo el último parámetro sirve
para recoger el valor que nos devuelva el método que hayamos invocado.
• free(?Reference): libera la memoria asociada al objeto que se le indica en el primer
parámetro.
Las referencias se usan para saber a qué objeto nos referimos, así pues cada objeto que
creemos deberá tener su propia referencia, ya que después toda memoria que reservemos
con new, será conveniente liberarla con free.
Prolog usa principalmente dos tipos de referencias, una que sería mediante las variables
típicas de prolog (una cadena que empiece por mayúscula, como Variable, Pepe, ....), y la otra
forma es definir referencias con nombre, las cuales una vez definidas no podremos volver a
crear otra referencia para dicho nombre, ya que nos dará error en ejecución. Estas últimas
referencias resultan interesantes para acceder de forma global a un mismo objeto, sin tener
que pasar ningún tipo de parámetro. Estas variables se crean usando el operador especial @
así pues, cualquier nombre que empiece por @ será una variable asociada a ese nombre que
le demos (por ejemplo, @pepe, @variable).
Cuando usemos las variables con nombre deberemos llevar especial cuidado ya que
deberemos liberarlas usando free antes de que finalice la evaluación del predicado, ya que si
volvemos a realizar la misma consulta, y volvemos a crear objetos usando esas mismas
variables, dará error y no dejará ejecutar.
Por ejemplo, para crear un dialogo que contenga un botón y que al pulsar sobre el mismo
cierre esa ventana:
Código 1: Ejemplo 01
UNIVERSIDAD NACIONAL DE TRUJILLO 7
SWI PROLOG
Figura 1: Ventana de Ejemplo 01
En este ejemplo podemos ver como se usan los predicados new, free y send, así como
podemos ver que aparecen otros como append, open y quit, que son métodos de la clase
dialog (de la cual hemos creado una instancia en la variable D usando el predicado new).
Cuando pasamos parámetros en la creación o en la llamada a un método de un objeto, estos
métodos pueden tener dos tipos de parámetros, pueden tener parámetros obligatorios y
parámetros opcionales. La diferencia está en que si no indicamos explícitamente un
parámetro obligatorio XPCE generará un error, mientras que si no definimos un parámetro
opcional, entonces XPCE pondrá en su lugar la constante @default cuyo valor ya es el que
tenga definido por defecto ese método.
5. ENVIANDO MENSAJES
Como hemos visto en el ejemplo, determinados objetos pueden ejecutar determinadas
acciones, como puede ser el caso del objeto button, así pues, cuando pulsamos en el botón,
podemos hacer que se ejecuten una o más acciones, en este caso que
se evaluen uno o más predicados.
Si únicamente queremos evaluar 1 predicado, podemos hacer uso del predicado:
Como se puede observar, el primer parámetro indica quien es el receptor, en cuyo caso, en el
ejemplo anterior será siempre un objeto que previamente hemos creado con new.
El selector (el segundo parámetro), indicaría el nombre del método o la función o el
predicado al que se desea llamar, y los posteriores parámetros son los argumentos de esa
función.
Como nota importante cabe destacar que en esos parámetros únicamente pueden ir objetos
declarados en el XPCE, es decir, que no podemos poner una lista como tercer o cuarto
parámetro y esperar que se le pase esa lista a la función cuando sea llamada (al menos en
principio).
En el campo del receptor básicamente podemos especificar una variable que hallamos
inicializado con new, teniendo entonces que invocar necesariamente a un método de ese
objeto, o por el contrario, también se permite invocar a un predicado con sus
UNIVERSIDAD NACIONAL DE TRUJILLO 8
SWI PROLOG
correspondientes parámetros (exceptuando listas y tipos no básicos que implemente el
XPCE), pero en este caso en el campo de receptor deberemos poner @prolog y en el
segundo parámetro el nombre del predicado y seguir rellenando con los argumentos.
Con ánimo de mostrar y entender mejor como funciona se puede ver el siguiente ejemplo:
Código 2
Figura 2
UNIVERSIDAD NACIONAL DE TRUJILLO 9
SWI PROLOG
Figura 3
6. ELEMENTOS DEL ENTORNO GRAFICO
Una vez explicados los conceptos básicos ya podemos crear objetos en el entorno gráfico,
tales como diálogos, textos, etiquetas, recuadros para dibujar, botones, etc. además
seguramente en este apartado se entenderá mejor el uso de todo lo anterior.
Como hemos dicho anteriormente, podemos crear varios tipos de objetos, a continuación
enumeraré algunos de estos objetos y algunos de sus métodos.
UNIVERSIDAD NACIONAL DE TRUJILLO 10
SWI PROLOG
Tabla 1: Diferente Objetos para SWI Prolog
De las clases citadas, únicamente describiré el constructor y algunos métodos de algunas de
ellas, y como usarlas o interaccionar con las demás clases.
6.1. Dialogo
Esta es la clase básica para crear ventanas de diálogo.
Constructor:
name: indica el titulo a la ventana
size: es de tipo size y sirve para indicar el tamaño de la ventana
display: indica donde queremos que se visualice (mejor no tocar este parámetro si no
sabemos que estamos haciendo)
Podemos observar que todos los parámetros son opcionales, aunque siempre es bueno
ponerle un titulo a la ventana
UNIVERSIDAD NACIONAL DE TRUJILLO 11
SWI PROLOG
Así, como ejemplo crearemos un dialogo con titulo ‘Titulo del dialogo’ y de tamaño
440 x 320.
Métodos:
Esta clase dispone de varios métodos que pueden resultar interesantes, entre ellos
tenemos:
append(Objeto): Insertaria el objeto Objeto dentro del dialogo, visualizándolo en el
mismo, por ejemplo sirve para insertar un botón o cualquier otra cosa, como en el
siguiente ejemplo:
open(): abre la ventana de diálogo visualizándola en pantalla:
destroy(): cierra la ventana de diálogo visualizada en pantalla:
6.2. Label
Esta es la clase básica para crear etiquetas de texto
Constructor:
name: indica el nombre de la etiqueta
selection: puede ser una cadena o una imagen que queremos que sea mostrada en el
lugar donde aparece la etiqueta.
font: permite indicar la fuente en la que queremos mostrar el texto
6.3. Windows
Esta clase sirve para crear ventanas donde dibujar o poner otros objetos gráficos
Constructor:
name: indica el nombre de la ventana
UNIVERSIDAD NACIONAL DE TRUJILLO 12
SWI PROLOG
size: indica el tamaño que queremos tenga la ventana
display: indica donde queremos que aparezca (recomendamos no usar este parámetro)
Por ejemplo para crear una nueva ventana (de gráficos) de tamaño 320x200 pixeles
Métodos:
Para esta clase nos interesarán básicamente los métodos ‘display’ y ‘flush’:
display(figure, point): sirve para mostrar una figura en un lugar determinado de la
ventana una determinada figura (que por ejemplo puede ser una imagen) y point que
indicará las coordenadas (x,y) de la ventana donde queremos que se muestre.
El siguiente ejemplo mostraría la figura Figure en la posicion (22, 32) de la ventana
W.
flush(): sirve para redibujar la venana que invoca al método, es decir, si estamos
realizando una serie de llamadas y no está en el bucle principal de la ventana, entonces
podemos llamar a este método para redibujar la ventana y los elementos que hayamos
creado o movido.
UNIVERSIDAD NACIONAL DE TRUJILLO 13
SWI PROLOG
7. APLICACION SIMPLE
Código 4
Figura 5
UNIVERSIDAD NACIONAL DE TRUJILLO 14
SWI PROLOG
8. BIBLIOGRAFIA
• Programming in XPCE/Prolog: Guía de usuario para aprender a programar en Prolog con
el XPCE, desde lo más básico hasta lo más complejo.
http://www.swi.psy.uva.nl/projects/xpce/UserGuide/
• Class summary descriptions: Página donde se puede encontrar información sobre un gran
número de clases y algunos de sus métodos, con algunos ejemplos.
http://www.swi.psy.uva.nl/projects/xpce/UserGuide/summary.html
• Página Oficial de SWI‐Prolog: Página de donde descargar un intérprete o la
documentación para programar en Prolog y XPCE
http://www.swi ‐prolog.org/
• The XPCE online reference manual: manual de referencia con todos los métodos y
objetos que pueden ser creados y referenciados.
http://gollem.swi.psy.uva.nl:8080/