ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Minimanualillo de SWI-Prolog

felipeelizaldeTrabajo26 de Marzo de 2013

2.874 Palabras (12 Páginas)491 Visitas

Página 1 de 12

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

...

Descargar como (para miembros actualizados) txt (18 Kb)
Leer 11 páginas más »
Disponible sólo en Clubensayos.com