Zona HTML Zona Java Zona PHP Zona ASP Zona Bases de datos
Inicio > Tutoriales > Otros lenguajes > Prolog > Tutorial básico de programación en Prolog
-Tutoriales

Tutorial básico de programación en Prolog


El código

. Cláusulas

Hasta ahora sabemos cómo ejecutar objetivos, pero no sabemos como escribir el código de los predicados. Los predicados se definen mediante un conjunto de cláusulas:

  clausula1 
  clausula2 
  ...       
  clausulaN 
  

Donde el orden es significativo. Para facilitar la lectura, se suele dejar una línea en blanco entre cláusula y cláusula.

Las cláusulas son términos (como todo en Prolog) con el siguiente formato:

  cabeza :-  
    ojetivo1, 
    ojetivo2, 
    ..., 
    ojetivoN. 
  

Todo gira en torno al operador ":-". Lo que aparece a la izquierda se denomina cabeza y la secuencia de objetivos que aparece a la derecha se denomina cuerpo.

La cabeza es un término simple, por ejemplo, p(X,12) podría ser la cabeza de una cláusula del predicado p/2. Es decir, todas las cláusulas de un mismo predicado tienen en la cabeza un término con el mismo functor y aridad, aunque los argumentos pueden ser distintos.

El cuerpo no es más que el conjunto de condiciones que deben cumplirse (tener éxito) para que el predicado tenga éxito si lo invocamos con un objetivo que unifique con la cabeza.

Cuando invocamos un objetivo, Prolog unifica dicho objetivo con las cabezas de las cláusulas. Cada cláusula que unifique constituye un punto de elección.

A continuación se ejecuta el cuerpo de la primera cláusula. Para ello se mantienen las ligaduras que ocurrieron en el paso anterior. Si el cuerpo tiene éxito, pueden ocurrir nuevas ligaduras. Dichas ligaduras pueden afectar de nuevo a la cabeza de la cláusula. En consecuencia, el ámbito de visibilidad de las variables es una única cláusula.

Si el cuerpo de la cláusula falla, el mecanismo de backtracking nos lleva al siguiente punto de elección, es decir, la siguiente cláusula. El proceso se repite mientras queden cabezas que unifiquen (es decir, puntos de elección). Cuando no quedan cabezas que unifiquen, el objetivo falla.

. Ejemplo simple

Veamos un predicado compuesto por una simple cláusula:

  es_viejo(Individuo) :- 
    edad(Individuo,Valor), 
    Valor > 60.
  

Ahora invocamos el objetivo es_viejo(luis). Para ello supongamos que la edad de Luis es 32 años, es decir, el objetivo edad(luis,32) tiene éxito.

Primero se unifica la cabeza de la cláusula con el objetivo. Es decir, unificamos es_viejo(luis) y es_viejo(Individuo), produciendose la ligadura de la variable Individuo al valor luis. Como el ámbito de visibilidad de la variable es su cláusula, la ligadura también afecta al cuerpo, luego estamos ejecutando realmente:

  es_viejo(luis) :- 
    edad(luis,Valor), 
    Valor > 60.
  

Ahora ejecutamos el cuerpo, que liga la variable Valor a 32. Pero el cuerpo falla porque el segundo objetivo falla (32>60 es falso). Entonces la cláusula falla y se produce backtracking. Como no hay más puntos de elección el objetivo falla. Es decir, Luis no es un viejo.

. Ejemplo menos simple

Ahora veamos como las ligaduras que se producen en el cuerpo de la cláusula afectan también a la cabeza. Consideramos el siguiente predicado compuesto de una única cláusula:

  mayor_que(Fulano,Mengano) :- 
    edad(Mengano,EdadMengano), 
    edad(Fulano,EdadFulanano), 
    EdadFulano > EdadMengano.
  

Supongamos que la edad de Juan es 20 años y la de Luis es 32 años. Ejecutamos el objetivo mayor_que(luis,Quien):

  • Unificamos el objetivo con la cabeza: la variable Fulano se liga a luis, la variable Mengano permanece unificada con la variable Quien. Esto último es importante.
  • Ejecutamos el cuerpo, que tiene éxito y liga las variables Mengano a juan, EdadMengano a 20, EdadFulano a 32.
  • Como la variable Mengano ha quedado ligada, y además unificaba con Quien, la variable Quien queda ligada a ese mismo valor.
  • El objetivo tiene éxito ligando la variable Quien al valor juan. Es decir, Luis es mayor que Juan.

. Cláusulas sin cuerpo

Si no existen condiciones para que una cláusula sea cierta podemos omitir el cuerpo. En tal caso solamente escribimos la cabeza terminada en punto. Por ejemplo:

  edad(juan,32). 
  edad(luis,20).
  

Son dos cláusulas del predicado edad/2. Las cláusulas sin cuerpo se suelen denominar hechos, e.g. es un hecho que la edad de Luis es 20 años.

. Culturilla

  • Podemos escribir las cláusulas en una sola línea, si no lo hacemos es por legibilidad: a :- b,c,d.
  • El orden de escritura de las cláusulas determina el orden en que se suceden las soluciones.
  • Recuerde que pueden aparecer puntos de elección dentro del cuerpo de una cláusula, como en toda secuencia de objetivos. Esto significa que una única cláusula puede dar lugar a varias soluciones cuando uno o más objetivos del cuerpo tienen también varias soluciones.
  • Si una misma variable aparece en dos cláusulas diferentes, entonces son variables diferentes pero con el mismo nombre. Recuerde que el ámbito de visibilidad de las variables es una única cláusula.
 
Patrocinados
 

Copyright © 1999-2006 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network