Está en la página 1de 4

Introduccin a la Lgica, Curso 2006/2007

Programacin Lgica: Introduccin y Sintaxis Bsica


Prolog
Prolog es un lenguaje declarativo e interpretado. Esto quiere decir que el lenguaje se usa para representar
conocimientos sobre un determinado dominio y las relaciones entre objetos de ese dominio. A partir de
ese conocimiento, el propio sistema deduce respuestas a cuestiones que se le planteen, es decir, realiza
una inferencia.
El dominio lo constituyen un conjunto de objetos y el conocimiento se formaliza mediante un conjunto de
relaciones (reglas) que describen de forma simultnea propiedades de los objetos y sus interacciones. Por
tanto, escribir un programa de Prolog consiste en declarar el conocimiento disponible acerca de:

Objetos: tanto sus propiedades (por ejemplo, X es par, X es un hombre) como las relaciones
entre ellos (por ejemplo, X es mltiplo de Y, X es padre de Y).

Reglas: determinan interacciones lgicas entre los objetos, del tipo si ocurren q y r, entonces
ocurre p.

La ventaja de este tipo de lenguaje frente a lenguajes procedimentales (como Java) es que no hay que
preocuparse de cmo resolver algo; la desventaja es que la resolucin automtica no siempre es eficiente.
SWI Prolog
La sintaxis empleada en SWI-Prolog v5.2 sigue tanto el estndar de tipo Edimburgo como el
ISO-Standar. Esta herramienta, aparte de proporcionar un entorno de trabajo en el que se permiten
interpretar programas Prolog tambin incluye opciones de compilacin pudiendo generar un ejecutable
independiente, as como la posibilidad de combinar Prolog con lenguaje C mediante un potente interfaz
bidireccional que permite generar ejecutables tanto desde C como desde Prolog incorporando cdigo en
ambos lenguajes. SWI-Prolog proporciona un entorno de desarrollo en Prolog multiplataforma (Windows
y Linux, entre otros) y adems gratuito, disponible en su pgina web: http://www.swi-prolog.org .
Entorno de trabajo
El entorno de trabajo est formado por diversos mdulos. En primer lugar la ventana principal que es la
consola que acta como intrprete de comandos. Permite plantear, mediante el prompt, consultas (goals)
al sistema. En ella se presentan las soluciones a los objetivos planteados, los errores de compilacin y
permite introducir cualquier comando en Prolog. Para la edicin de los documentos proporciona una
versin del editor Emacs.
Edicin de programas
Proporciona una versin de Emacs, para activarlo deberemos lanzar el objetivo: emacs. o
emacs(nombre_fichero):
:- emacs.
:- emacs(pract1).

1/4

Introduccin a la Lgica, Curso 2006/2007

Este editor es sensible a contexto con lo que nos resaltar la sintaxis de nuestro cdigo fuente, y nos
facilitar darle formato con opciones de sangrado automtico. Desde este editor podremos no slo editar,
sino tambin compilar y lanzar el depurador de cdigo. Todo ello a travs de sus opciones de men.
Para editar un archivo ya existente utilizamos la opcin File| Find file. Los programas en cdigo fuente
de Prolog vienen en archivos de texto (con extensin .pl) en formato ASCII.
Sintaxis (Bsica)
Acabamos ver que SWI-Prolog trabaja con archivos de texto en formato ASCII. Cada archivo contiene
un programa o un mdulo de sentencias Prolog. La composicin bsica de un programa Prolog viene
dada por dos secciones, ambas opcionales:

Clusulas : Clusulas definidas del programa (hechos y reglas)

Comandos : Objetivos a plantear al sistema

Veamos con ms detalle cada una de ellas.


Clusulas
Las clusulas del programa constan de los hechos y las reglas, terminados con un punto cada uno. Los
predicados no se declaran, con lo que los tipos de sus argumentos pueden variar de una invocacin a otra.
Obviamente si se emplean operadores propios de un tipo de datos (por ejemplo, aritmticos) sobre otro
tipo (constantes simblicas en vez de nmeros) se producir un error de ejecucin.

Sintaxis:
Hechos: nombre_predicado(arg1, , argn).
Reglas: nombre_predicado(arg1,,argn): pred1(...),...,predm(...).

NOTA: Los hechos y reglas con el mismo nombre deben de ir correlativos en el programa.
NOTA2: No puede haber espacios entre el nombre de predicado y el carcter (.
Comentarios:
/*
comentarios tipo C
*/
% comentario de una lnea
Dominios (tipos) de argumentos
Los principales dominios reconocidos por SWI-Prolog son:
Enteros

Enteros de 32bits con signo.


0 1 9821 -10 64320

Reales

Nmeros reales, admiten formato cientfico.


1.0 246.8 -12.3 20.002e-10 -3.3e20

tomos alfanumricos

Comienza con una letra (a-z) minscula seguido por una secuencia de cero o ms
caracteres alfabticos (A-Z,a-z) o (_).

2/4

Introduccin a la Lgica, Curso 2006/2007

Ej: manzana a1 caso_1 tarta_de_manzana miCasa


tomos simblicos

Secuencia de smbolos, y caracteres con ASCII > 127. Caracteres simblicos son: #
$ & = - ^ ~ \ @ ` : . / + * ? < >
Ej: & &: ++ << >> <- .. *-/*

tomos literales

Secuencia de caracteres entre comillas simples (' '). La secuencia ~nnn representa el
carcter con cdigo ASCII nnn. ~I, representa ctrl-I.
Para insertar un ' en un tomo se introducen dos ' seguidos.
Ej:'Manzana' '123' 'hola mundo'
'~Ihol~065~M~J'(<tab>hola<CR><LF>)

Variables
Las variables son cadenas alfanumricas cuyo primer carcter es una letra mayscula o el guin de
subrayado _.
ej: X, A, Titulo, _Sys01, Temperatura, Altura.
Comandos
Un comando es un Goal (objetivo) de la forma:

:- goal1,, goaln.

% n>=1

Cuando el intrprete se encuentra con un objetivo durante la compilacin, ste es ejecutado


inmediatamente.
Ej:

:- abuelo(X,Y).
:- write('Hola Mundo!'),nl.

Los objetivos as planteados se diferencian de los objetivos planteados directamente desde la consola en
dos aspectos:
1.

Prolog busca slo la primera solucin para ellos.

2.

Prolog no muestra el resultado de resolver estos objetivos.

Compilacin
Para poder plantear un objetivo es necesario compilar previamente el programa Prolog. Adems,
debemos compilar cada vez que introducimos algn cambio o correccin en el cdigo fuente. Para ello
seleccionamos la opcin de compilacin Compile|Compile buffer.

Como resultado de la compilacin:

Si no hubo errores se nos muestra en la consola el mensaje:

% path_absoluto/de/nombre.pl compiled X sec, N bytes


| ?-

3/4

Introduccin a la Lgica, Curso 2006/2007

Si se detecta algn error se muestra un cuadro de mensaje con la lista de errores encontrados. Cada
elemento de la lista es un enlace a la posicin del programa donde se identific el error, a la que
accederemos directamente por medio de un doble clic.

Tambin es posible cargar las definiciones de un archivo .pl en memoria desde la consola por medio del
predicado consult(archivo.pl) o la opcin File|Consult.
Consulta de Objetivos (GOALS)
Una vez compiladas las clusulas del programa, podemos pasar a plantear preguntas (goals) al sistema.
Para ello basta con introducir en el prompt de la consola los objetivos que queramos plantear.
Ej:

| ?- abuelo(X,Y).
| ?- write('Hola Mundo!'),nl.

Si un objetivo tiene ms de una solucin, Prolog nos muestra la primera y espera que pulsemos una tecla.
Si pulsamos la tecla n (Next) nos mostrar la siguiente, si pulsamos <space> no buscar ms
soluciones. Para interrumpir la evaluacin de un objetivo basta con pulsar la combinacin <Crtl>+C y
luego a (Abort).
Ayuda en Lnea
La opcin del men Help|Online Manual nos muestra la ayuda en lnea del SWI-Prolog. Contiene
informacin de referencia de los predicados predefinidos, errores y mensajes del sistema de ventanas.

4/4