PROLOG es un lenguaje de programación declarativo. Los lenguajes declarativos
se diferencian de los lenguajes imperativos o procedurales en que están basados en
formalismos abstractos (PROLOG está basado en la lógica de predicados de primer
orden y LISP, otro lenguaje de programación declarativa, en lambda calculo), y por
tanto su semántica no depende de la máquina en la que se ejecutan. Las sentencias
en estos lenguajes se entienden sin necesidad de hacer referencia al nivel máquina
para explicar los efectos colaterales. Por tanto, un programa escrito en un lenguaje
declarativo puede usarse como una especificación o una descripción formal de un
problema. Otra ventaja de los programas escritos en lenguajes declarativos es que
se pueden desarrollar y comprobar poco a poco, y pueden ser sintetizados o
transformados sistemáticamente.
MARCO TEÓRICO
PROLOG es un lenguaje de programación muy útil para resolver problemas que
implican objetos y relaciones entre objetos. Está basado en los siguientes
mecanismos básicos, que se irán explicando a lo largo de este capítulo:
· Unificación
· Estructuras de datos basadas en árboles
· Backtracking automático
La sintaxis del lenguaje consiste en lo siguiente:
· Declarar hechos sobre objetos y sus relaciones
· Hacer preguntas sobre objetos y sus relaciones
· Definir reglas sobre objetos y sus relaciones
Los hechos PROLOG
Para explicar los fundamentos de PROLOG vamos a utilizar el típico ejemplo de
las relaciones familiares.
Para decir que Laura es uno de los dos progenitores de Damián, podríamos declarar
el siguiente hecho PROLOG:
progenitor(laura, damian).
“progenitor” es el nombre de la relación o nombre de predicado y “laura” y
“damian” son los argumentos. Los hechos acaban siempre con punto. Nosotros
interpretaremos que Laura, primer argumento de la relación, es la madre de
Damián, segundo argumento de la relación. Sin embargo, este orden es arbitrario y
cada programador puede darle su propio significado. Los nombres de las relaciones
y los argumentos que se refieren a objetos o personas concretas se escribirán con
minúscula.
Otros ejemplos de hechos pueden ser los siguientes:
le_gusta_a(juan,maria).
valioso(oro).
tiene(juan,libro).
da(juan,libro,maria).
que haga de ellos. La relación le_gusta_a(juan,maria) es equivalente a la relación
a(b,c), aunque para que la interpretación sea más sencilla, se recomienda que los
nombres se elijan de forma que ayuden a su interpretación.
Los hechos no tienen que reflejar el mundo real necesariamente, pero será única y
exclusivamente lo que PROLOG tomará como verdadero. Un conjunto de hechos
(también llamados cláusulas), junto con un conjunto de reglas, forman lo que se
llama una base de datos PROLOG.
Las preguntas PROLOG
Sobre un conjunto de hechos se pueden realizar una serie de preguntas. Por
ejemplo:
?- le_gusta_a(juan,maria).
PROLOG busca automáticamente en la base de datos si existe un hecho que se
puede unificar (es decir, tiene el mismo nombre de predicado, el mismo número de
argumentos ¾o aridad ¾ y cada uno de los argumentos tiene el mismo nombre,
uno a uno) con el hecho que aparece en la pregunta. PROLOG contestará “SI” si
encuentra ese hecho y “NO” si no lo encuentra. La contestación “NO” no implica
que el hecho sea falso (aunque sí lo sea para nuestra base de datos), sino que no se
puede probar (en general) que sea verdadero con el conocimiento almacenado en la
base de datos.
Para realizar preguntas más interesantes, como por ejemplo, qué le gusta a María o
cuáles son los padres de Damián, se usarán las variables. En PROLOG las variables
empiezan por mayúscula. Por ejemplo:
?-le_gusta_a(maria,X).
?-progenitor(Y,damian).