Existen, en Prolog,  básicamente 2 estructuras: los términos y las sentencias.

Los términos son los valores elementales en Prolog. Hay tres tipos de términos:

constantes: Son los elementos más simples y se representan por medio de una cadena de caracteres, por ejemplo números o cualquier identificador que comience con una letra minúscula, ej.: a, sócrates, 34, f4*iu

variables: Se utilizan para especificar a un individuo indeterminado. Se identifican con una letra mayúscula al comienzo, ej.:  X, Y, Pepe, Alfa4

Si quisiéramos saber quienes son personas, podemos escribir la consulta persona(X)? a lo que Prolog responderá X/sócrates, si es que puede deducir esa información de su programa lógico. Lo que estamos consultando, en términos del lenguaje natural es ¿qué valores se pueden asignar a la variable X para que la consulta sea consecuencia lógica del programa?

En Prolog, el significado de las variables es diferente al que conocemos de los lenguajes tradicionales. Más que una posición de memoria, indica una indeterminación acerca de una identidad.

estructuras: identificadores que comienzan con letra minúscula, seguidos de parámetros que a su vez son términos. Este tipo de estructuras se las conoce como functor dado que su apariencia es similar al nombre de una función.

Ejemplo:

leyo(gabriela, libro(X), veces(5))

En este ejemplo hay 2 constantes (gabriela y 5), una variable (X), dos functores unarios (libro y veces) y un functor n-ario (leyo).

Por otro lado, existen tres tipos de sentencias:

hechos: Es la clase más simple de sentencia. Establece una relación entre objetos, por ejemplo

persona(socrates)

dice que Sócrates es una persona.

Las relaciones que se establecen entre objetos se denominan predicados y los objetos relacionados se llaman átomos.

consultas:Son sentencias que permiten recuperar información. Es un requerimiento para probar o no alguna afirmación a través de los predicados. Responder una consulta consiste en determinar si dicha consulta es una consecuencia lógica del programa. Para responder a estas consultas, se aplican reglas de deducción o de inferencia.

Si nuestro programa lógico sólo es un conjunto de hechos, para responder a una consulta, no hay más que buscar ese hecho en la lista. Si se encuentra un hecho idéntico a la consulta, Prolog responde ‘yes’, en otro caso, responde ‘no’. Por ejemplo, con el siguiente conjunto de hechos:

persona(socrates).
persona(aristoteles).
persona(platon).

Ante la consulta persona(socrates)?, Prolog responde ‘yes’ y ante la consulta persona(jose)?, Prolog responde ‘no’. Cabe destacar que el hecho que Prolog responda ‘no’ a la segunda consulta no quiere decir que José no sea una persona. Sólo significa que con la información que posee no puede inferir que José sea una persona. En otras palabras, no posee la información suficiente para realizar la demostración, y por lo tanto responde ‘no’.

reglas:Nos permiten definir nuevas relaciones a partir de otras ya existentes.  Una regla no es más que una consulta almacenada. Tienen la forma:

cabeza :- cuerpo.

Donde

  • cabeza es un predicado. Constituye el consecuente o conclusión. 
  • :- es un símbolo que se lee ‘si’
  • cuerpo es un conjunto de n predicados, tal que n>=0.

La regla se lee cabeza es verdadero si cuerpo es verdadero. O equivalentemente cuerpo => cabeza.

Ejemplo:

par(X):-divisible_por_dos(X)

lo que significa que si X es divisible por dos entonces X es par.

Es muy importante destacar que Prolog sólo permite un predicado en la cabeza, o sea sólo permite cláusulas de Horn.

Supongamos el siguiente programa lógico familiar:

padre_de(homero,pericles).
padre_de(homero,merlina).
padre_de(desconocido,homero).
padre_de(desconocido,lucas).
madre(morticia,pericles).
madre(morticia,merlina).
madre(laAbuela,homero).
varon(homero).
varon(pericles).
varon(lucas).
mujer(morticia).
mujer(merlina).
mujer(laAbuela).

Una consulta podría ser:

?- madre(morticia,pericles).

yes

En la primera  línea, Prolog nos presenta su prompt (?-) y seguidamente colocamos nuestra consulta, que debe terminar con un punto. Al dar enter, Prolog procesa la consulta e infiere la respuesta, en este caso verdadero (yes)

?-madre(teresa,morticia).

no

En este caso, Prolog no puede inferir con los datos que posee, que teresa sea la madre de morticia, por lo que responde falso (no). En lógica, esta regla es conocida como Suposición de mundo cerrado, es decir, cuando Prolog dice ‘no’ está queriendo decir ‘no puedo probarlo’.

Las consultas, como dijimos, pueden incluir variables, por ejemplo:

?-madre(morticia,X).
X=pericles;
X=merlina;

no