Minimanualillo de SWI-Prolog
Diosmicamino13 de Septiembre de 2011
3.762 Palabras (16 Páginas)699 Visitas
Minimanualillo de SWI-Prolog
Roberto Torres de Alba
22 de marzo de 2006
´Indice
1. Introducci´on 2
2. Comandos b´asicos 2
3. Sintaxis de Prolog 2
4. Ayuda 4
5. Consultando y modificando programas 5
5.1. Consultar programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
5.2. Errores y avisos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.3. Mostrar base de clausulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5.4. Modificando la base de clausulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6. Depurador 6
6.1. Depurador en modo texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
6.2. Depurador gr´afico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
7. Manejo de t´erminos 8
7.1. Jerarqu´ıa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
7.1.1. ´Atomos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
7.1.2. N´umeros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
7.2. Escritura y lectura de t´erminos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
8. Listas 12
9. Conjuntos 12
10.Manejo de archivos 12
11.Todas las soluciones a un objetivo 13
1
1. Introducci´on
Este peque˜no manual pretende ser una introducci´on al uso de SWI-Prolog poni´endolo en relaci´on
con los conceptos de la asignatura de Programaci´on L´ogica de las Ingenier´ıas T´ecnicas de Gesti´on y de
Sistema. La versi´on sobre la que versa este manual es la ´ultima que se puede encontrar, a d´ıa de hoy,
en la p´agina www.swi-prolog.com, que es la 5.6.6 para Windows NT/2000/XP.
2. Comandos b´asicos
Una vez instalado SWI-Prolog y procediendo a su ejecuci´on observamos el shell visto como un n´umero
m´as los caracteres ”?-”. Desde ah´ı es de donde vamos a ajecutar todos los objetivos. Los siguientes
apartados explican de forma muy general todo aquello que es fundamental conocer a la hora de usar
este int´erprete.
1. Consultar un programa Prolog: la manera m´as f´acil de consultar un programa Prolog es usando el
men´u file/consult y navegando por los directorios. Tambi´en existe la posibilidad de hacerlo desde
el shell escribiendo el nombre del programa, sin la extensi´on ”.pl”, encerrada por corchetes ”[ ]” y
seguida de punto. Ej:
[mi_prog].
2. Ayuda: SWI-Prolog posee una ayuda gr´afica f´acil de usar. Basta con poner en el shell ”help.”. Si
se quiere consultar un tema o un predicado en concreto basta con escribir el tema de la siguiente
forma: help(Tema).
3. Ejecuci´on de objetivos: para ejecutar un objetivo simplemente lo escribimos en el shell (seguido de
punto). Si el objetivo no tiene ´exito SWI-Prolog responder´a ”no”. Si ha tenido ´exito y el objetivo
ten´ıa variables entonces devolver´a la unificaci´on de esas variables que ha producido el ´exito y el
programa esperar´a una acci´on del usuario. Ahora debemos escribir un ´unico car´acter. Si buscamos
m´as respuestas escribiremos ”;” (punto y coma), si no pulsamos enter. Para una lista de comandos
escribimos ”h”.
4. Depuraci´on: Para entrar en el modo trace hay que escribir ”trace.”. Al lado del shell deber´ıa
aparecer la palabra ”[trace]”. Para salir de este modo hay que escribir ”notrace.” y ”nodebug.”.
Existe la posibilidad de utilizar un depurador gr´afico escribiendo ”guitracer.”
3. Sintaxis de Prolog
Cualquier programa en Prolog tiene que estar escrito en un fichero de texto plano (sin formato). La
manera m´as sencilla es usar el Bloc de Notas. Dicho archivo debe poseer la extensin ”.pl” para indicar
que contiene c´odigo fuente de Prolog.
Un programa Prolog est´a formado con un conjunto de hechos y de reglas junto con un objetivo. El
archivo del c´odigo fuente de Prolog contendr´a el conjunto de hechos y de reglas y el objetivo ser´a lanzado
desde el shell de SWI-Prolog.
Existen ciertas consideraciones sobre la sintaxis de Prolog:
1. Variables:
El identificador de una variable tendr´a que tener su primera letra en may´usculas.
Ej: X, Atapuerca, Cobaltina, RADgtfCdf
2
2. Constantes:
La primera letra de una constante deber´a estar escrita en min´usculas.
Ej: a, incienso, roberto, rADgtfCdf
Tambi´en se consideran constantes a los n´umeros,
Ej: 1, 5.02, 0.7
las palabras entre comillas simples
Ej: ’a’, ’A’, ’a a’
y la lista vac´ıa [ ].
3. Funciones:
Al igual que las constantes, su primera letra debe ser una min´uscula. Deber´a estar seguido de un
conjunto de t´erminos (otras funciones, variables o constantes) encerrados entre par´entesis.
Ej: f(c,X), conc arbol(Hijo Izq, Raiz, Hijo Der), rADgtfCdf(RADgtfCdf, rADgtfCdf)
4. Predicados:
Su sintaxis es la misma que la de las funciones aunque, por su localizaci´on dentro de la cl´ausula (es
decir, dentro del programa Prolog), el compilador los identificar´a como tal, y no como funciones.
Ej: f(c,X), conc arbol(Hijo Izq, Raiz, Hijo Der), rADgtfCdf(RADgtfCdf, rADgtfCdf)
Tambi´en existe la posibilidad de tener predicados 0-arios.
5. Hechos:
Son cl´ausulas de Horn que poseen un ´unico predicado en la cabeza y ninguno en el cuerpo. Tienen
la siguiente forma en sintaxis de l´ogica de primer orden:
P
En Prolog no se escribe la flecha sino que se pone un punto al final:
p.
donde p es un predicado y tiene que seguir su sintaxis. Ej:
padre(aaron, maria).
compositor(shostakovich).
shostakovich(compositor).
6. Reglas:
Son cl´ausulas de Horn que poseen un ´unico predicado en la cabeza y uno o m´as en el cuerpo.
Tienen la siguiente pinta:
P Q1,Q2,Q3 escritos en sintaxis clausular o
P Q1 ^ Q2 ^ Q3 escritos en sintaxis de l´ogica de primer orden.
En Prolog la flecha se sustituye por ”:-”, las conectivas conjuntivas se escriben como comas ”,” y
la regla termina en punto:
p :- q1, q2, q3.
donde, al igual que los hechos, p y q1, q2 y q3 son predicados. Ej:
cuadrado(X) :- poligono(X), numero_lados(X,4).
7. Objetivos:
Son cl´ausulas de Horn que no poseen ning´un predicado en su cabeza:
Q1,Q2,Q3
Los predicados se escriben separados por comas y terminados en punto. S´olo pueden sen lanzados
desde el shell de SWI-Prolog.
3
?- padre(X, Y),padre(Y, Z).
4. Ayuda
En la ayuda de SWI-Prolog, la definici´on de los predicados tiene su propia sintaxis. El nombre y
la aridad determinan un´ıvocamente a un predicado. Esto en Prolog se escribe pred/arid donde pred es
el nombre del predicado y arid su aridad. Despu´es del nombre del predicado se escribe un n´umero de
variables, dependiendo de la aridad, con un s´ımbolo delante de la variable:
+ : significa que esa variable debe estar instanciada, es decir, que no puede ser una variable sin estar
unificada con nada, en el momento es que se llega a ese predicado. Desde el punto de vista del
programador se puede ver como un par´ametro de entrada. A pesar de que en l´ogica de primer
orden ello no tendr´ıa mucho sentido, en SWI-Prolog se dan cosas as´ı debido a que, por ejemplo,
dicho predicado puede estar relacionado con una llamada a C (como sort/2 ) o con operaciones
aritm´eticas (como is/2 ). Ej:
?- sort(X,[1,2,3,4]).
ERROR: sort/2: Arguments are not sufficiently instantiated
- : identico a + pero esta vez como predicado de salida. Pongamos lo que le pongamos va a intentar
unificar con ello. Ej:
?- sotr([5,4,3,2,1], L).
L = [1, 2, 3, 4, 5]
?- sort([5,4,3,2,1], [C|R] ).
C = 1
R = [2, 3, 4, 5]
?- sort([5,4,3,2,1], [2,1,3,5,4] ).
No
?: se considera de entrada o de salida. Esto sigue el procedimiento normal de resoluci´on de la programaci
´on l´ogica.
Para ver la ayuda sobre el predicado pred escribimos help(pred). Si adem´as nos referimos a un
predicado concreto tambi´en tenemos que escribir su aridad: help(pred/2). Podemos indicar una secci´on
del manual: la seccion 2.4 se escribira como 2-4: help(2-4).
Si no tenemos informaci´on tan concreta podemos usar el predicado apropos/1. A este predicado se
le pasa el nombre aproximado de lo que buscamos. Nos devolvera predicados, funciones o secciones del
manual que contengan ese nombre. S´ı le importa las may´usculas o min´usculas (cuidado si la primera es
mayusculas porque, l´ogicamente, pensar´a que el argumento es una variable). Tambi´en podemos proporcionarle
frases escritas entre comillas simples. Ej:
apropos(file).
apropos(’file’).
apropos(’File’).
apropos(’the file’).
4
Los predicados explain/1 y explain/2 dan cierta informaci´on sobre el argumento, como su funci´on o
referencias
...