Tutorial básico de programación en Prolog

La unificaci�n es el mecanismo mediante el cu�l las variables l�gicas toman valor en Prolog. El valor que puede tomar una variable consiste en cualquier t�rmino, por ejemplo, j(3), 23.2, 'hola que tal', etc. Por eso decimos que los datos que maneja Prolog son t�rminos.

Cuando una variable no tiene valor se dice que est� libre. Pero una vez que se le asigna valor, �ste ya no cambia, por eso se dice que la variable est� ligada.

Se dice que dos t�rminos unifican cuando existe una posible ligadura (asignaci�n de valor) de las variables tal que ambos t�rminos son id�nticos sustituyendo las variables por dichos valores. Por ejemplo: a(X,3) y a(4,Z) unifican dando valores a las variables: X vale 4, Z vale 3. Obs�rvese que las variables de ambos t�rminos entran en juego.

Por otra parte, no todas las variables estan obligadas a quedar ligadas. Por ejemplo: h(X) y h(Y) unifican aunque las variables X e Y no quedan ligadas. No obstante , ambas variables permanecen unificadas entre s�. Si posteriormente ligamos X al valor j(3) (por ejemplo), entonces autom�ticamente la variable Y tomar� ese mismo valor. Lo que esta ocurriendo es que, al unificar los t�rminos dados, se impone la restricci�n de que X e Y deben tomar el mismo valor aunque en ese preciso instante no se conozca dicho valor.

La unificaci�n no debe confundirse con la asignaci�n de los lenguajes imperativos puesto que representa la igualdad l�gica. Muchas veces unificamos variables con t�rminos directamente y de manera expl�cita (ya veremos como se hace esto), por ejemplo,X y 355. Esto provoca la sensaci�n de que estamos asignando valores a las variables al estilo imperativo.

Para saber si dos t�rminos unifican podemos aplicar las siguientes normas:

  • Una variable siempre unifica con un t�rmino, quedando �sta ligada a dicho t�rmino.
  • Dos variables siempre unifican entre s�, adem�s, cuando una de ellas se liga a un t�rmino, todas las que unifican se ligan a dicho t�rmino.
  • Para que dos t�rminos unifiquen, deben tener el mismo functor y la misma aridad. Despu�s se comprueba que los argumentos unifican uno a uno manteniendo las ligaduras que se produzcan en cada uno.
  • Si dos t�rminos no unifican, ninguna variable queda ligada.

.�Ejemplos paradigm�ticos

  • Una misma variable puede aparecer varias veces en los t�rminos a unificar. Ejemplo: k(Z,Z) y k(4,H). Por culpa del primer argumento, Z se liga al valor 4. Por culpa del segundo argumento, Z y H unifican, pero como Z se liga a un valor, entonces H se liga a ese mismo valor, que es 4.
  • Recuerde que una variable no puede ligarse a dos valores distintos. Por ejemplo: k(Z,Z) y k(4,3) no unifican, sin embargo k(Z,Z) y k(5,5) s� unifican.
  • ��Ser�a capaz de decir a que valores se ligan las variables de este ejemplo�? a(b(j,K),c(X)) y a(b(W,c(X)),c(W)). Puede estar seguro de que unifican.
  • Cuidado con las variables an�nimas, recuerde que son todas distintas. Por ejemplo: k(_,_) y k(3,4) unifican perfectamente.

.�Culturilla

  • Existe un algoritmo de unificaci�n m�s preciso que las normas dadas aqui. Adem�s es computable, de otra manera, no estariamos hablando de Prolog.
  • Una variable siempre unifica consigo misma: Z y Z.
  • Cuando una variable empieza por el s�mbolo de subrayado, por ejemplo _Var1, Prolog sobreentiende que no estamos interesados en conocer el valor concreto que tiene esa variable. Esto sirve para evitar ciertos mensajes de advertencia (warnings) del compilador que resultan algo molestos.
  • Una variable puede unificar con un t�rmino que contiene esa variable: X y a(X). Esto no es muy recomendable puesto que estamos definiendo un t�rmino infinitamente anidado. No obstante, algunos entornos de desarrollo son tan potentes que pueden manejar dichos t�rminos dependiendo, eso s�, de qu� se pretenda hacer con ellos.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR