JPL - Uniendo Prolog y Java en Linux
Enviado por ejcp92 • 23 de Agosto de 2013 • 566 Palabras (3 Páginas) • 485 Visitas
JPL - Uniendo Prolog y Java en Linux
JPL es una interfaz que permite comunicar a Java con Prolog y viceversa. Esta interfaz se puede descargar como una librería adicional de la implementación ampliamente conocida de prolog: Swi-prolog. Existen en internet documentos que explican como hacer funcionar dicha libreria e incluso dan ejemplos, sin embargo, en algunos casos no funcionan y salen errores extraños que no brindan pistas sobre lo que esta sucediendo.
La dificultad principal radica en que no solamente tenemos que agregar al CLASSPATH una o varias librerías *.jar sino que se requieren librerías del sistema para que todo trabaje correctamente.
Entorno:
***********************************************
SO: Ubuntu karmic koala (9.10)
Java: java-6-sun
IDE: Eclipse Galileo (desde donde hice la prueba)
***********************************************
Desde el manejador de paquetes synaptic descargamos swi-prolog y swi-prolog-jpl. Generalmente no es necesario descargar el código fuente y hacer una compilación manual.
Una vez descargados e instalados dichos paquetes, tendremos en el directorio /usr/lib/swi-prolog/ los archivos que necesitamos para trabajar.
Estos son los archivos clave que hay que tener en cuenta:
En /usr/lib/swi-prolog/lib esta el archivo jpl.jar
En /usr/lib/swi-prolog/lib/i386 esta el archivo libjpl.so
Ahora vamos a poner a funcionar el ejemplo que trae swi-prolog. Este es el archivo prolog:
*****************************family.pl******************************
child_of(joe, ralf).
child_of(mary, joe).
child_of(steve, joe).
descendent_of(X, Y) :-
child_of(X, Y).
descendent_of(X, Y) :-
child_of(Z, Y),
descendent_of(X, Z).
*******************************************************************
Y este el de Java:
*******************************Family.java**************************
package jpl;
public class Family {
public static void main( String argv[] )
{
String t1 = "consult('family.pl')";
Query q1 = new Query(t1);
System.out.println( t1 + " " + (q1.hasSolution() ? "succeeded" : "failed") );
//--------------------------------------------------
String t2 = "child_of(joe, ralf)";
Query q2 = new Query(t2);
System.out.println( t2 + " is " + (q2.hasSolution() ? "provable" : "not provable") );
//--------------------------------------------------
String t3 = "descendent_of(steve, ralf)";
Query q3 = new Query(t3);
System.out.println( t3 + " is " +(q3.hasSolution() ? "provable"
...