Búscalo aquí:

Conectar Java con Prolog usando JPL

El uso de la programación lógica para la construcción de aplicaciones en las que se hace uso de técnicas propias de la Inteligencia Artificial es muy amplio debido basicamente a la naturalidad que este lenguaje tiene para este tipo de aplicaciones. Sin embargo, muchas veces se necesita hacer un trabajo hibrido entre un lenguaje de programación lógica como Prolog y cualquier otro, por ejemplo Java, de programación orientada a objetos, tal vez para aprovechar sus capacidades propias, o tal vez para aprovechar el entorno gráfico que facilita el manejo d einterfaces de usuario final. En este post mostraremos como realizar la conexión entre Java y Prolog usando la libreria JPL (Java Prolog Library).


Primero que nada debemos tener instalado Prolog, en mi caso tengo instalado una versión open source, la cual es SWI Prolog la cual he mencionado en post anteriores. Al instalar SWI Prolog, esta trae por defecto la libreria Java Prolog Library: JPL la cual será la interfaz que recibirá ordenes de Java y las enviará al entorno de Prolog y/o viceversa.

Ahora debemos de hacerle conocer a nuestro sistema operativo que trabajaremos en una capa de conexión Java-Prolog, para lo cual, agregaremos los path de Java y Prolog a nuestras variables de sistema, del sistema operativo en el que nos encontremos. En mi caso, estoy usando el jdk 1.6 y estoy en el sistema operativo Windows, por lo que las rutas que debo de agregar serán:

C:\Archivos de programa\Java\jdk1.6.0_10\bin;
C:\Archivos de programa\Java\jdk1.6.0_10\lib\tools.jar;
C:\Archivos de programa\Java\jdk1.6.0_10\jre\lib\rt.jar;
C:\Archivos de programa\pl\bin;
C:\Archivos de programa\pl\lib\jpl.jar;

Si usan otra versión de jdk entonces deberán hacer los cambios respectivos.

De modo gráfico, si se encuentran en Windows, pueden ir a las propiedades del sistema, entrar a opciones avanzadas, variables de entorno y agregar las rutas listadas anteriormente en el path de las variables de sistema, luego guardar los cambios (ver figura).

Y listo, saludos.


Quieres leer más post como éste???...suscribete aquí!!!


20 comentarios:

  1. Hola que tal? estoy buscando como puedo recibir desde Java el output genrado por el comando "write()" de Prolog, ya que solo puede recuperar variables objetivos, pero la salida write no me la recupera.. :( Gracias!

    ResponderEliminar
  2. El comando write() de Prolog, genera un output que va dirgido al dispositivo de salida, en este caso, a la consola de Prolog...es como un System.out.println() de Java...particularmente no he visto un método que capture esa salida write() y la redireccione a Java...lo que hago en estos casos es tomar la variable que deseo imprimir en Prolog y enviarla a Java a través de una consulta JPL. Sin embargo, no niego la posibilidad de que exista un método especial para lo que mencionas, sería de leer más la documentacion JPL.

    saludos

    ResponderEliminar
  3. Hola, estaba buscando la forma de consultar la base de datos (predicados, hechos y reglas) desde Java con el package JPL. He intentado hacer una query con listing pero no lo consigo. Un saludo

    ResponderEliminar
  4. hola, requiero d su ayuda, logro hacer la conexion prolog java pero en aplicacion d escritotio, pero necesito hacer la conexion en aplicacion web en netbeans he intentado pero no logro, espero pueda ayuadrme, saludos

    ResponderEliminar
  5. Jorge quisiera que me ayudes con la consulta JPL para poder enviar los mensajes e Prolog - write() - a Java; sobre todo a una clase creada por mi

    ResponderEliminar
  6. En prolog, la funcion write() es utilizada para imprimir en la consola de Prolog, se pueden imprimir cadenas asi como cualquier otro tipo de variable.

    ResponderEliminar
  7. Hola Jorge Soy Aida estoy haciendo un S.E. y necesito hacer la conexion SWI-Prolog pero para aplicacion WEB, y no he podido ya la de escritorio la hice, te agradeceria que si sabes como haerla me colabores...!
    Gracias...!

    ResponderEliminar
  8. Hola Aida, si es una aplicación web deberías empezar por encontrar la manera de que el JPL se encuentre instalado o conectado al servidor de una manera tal que la aplicación cliente pueda recibir una respuesta del servidor web.

    saludos

    ResponderEliminar
  9. Hola me llamo Eliza, te quería consultar lo siguiente: he agregado las variables de entorno que mencionas en tu blog y me sale error:Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jpl in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at jpl.JPL.loadNativeLibrary(JPL.java:100)
    at jpl.fli.Prolog.(Prolog.java:85).......
    Por favor, necesito que me orientes como poder resolverlo, es muy urgente, gracias.
    Mi version de swi-prolog es 5.7.8 y de jdk es 1.6.0_26

    ResponderEliminar
  10. Hola Eliza, te escribo para decirte que a mi tambien me salen esa lista de errores que muestras, por eso te quería pedir el favor de que si ya resolviste el problema con la conexion me enviaras la respuesta a mi correo eduardobb@suss.co.cu,
    Esto tambien es para todos los usuarios que tengan la respuesta y me puedan ayudar, esto va en mi tema de tesis y estoy algo atrazado por culpa de la conexion.. gracias y espero que me ayuden

    ResponderEliminar
  11. Hola, primero que nada necesitan verificar que la versión de jdk que tienen sea compatible con la de JPL que van a usar, en el caso del error que veo en el mensaje de Eliza es que no se está encontrando una compatibilidad entre jdk y jpl o no se esta colocando la ruta correcta. Recuerden también que las rutas que coloqué en el post fueron del computador donde realizé la instalación, uds pueden instalarlo en donde gusten solamente deben colocar las rutas adecuadas como variables de sistema

    ResponderEliminar
  12. hola jorge gracias por haberme contestado mi pregunta, ahora, como se que el jdk que yo tengo es compatible con el jpl...

    ResponderEliminar
  13. Para ver las especificaciones JPL pueden dar una leida en la web oficial de JPL

    saludos

    ResponderEliminar
  14. Hola a todos los lectores soy Eduardo, quería responder una pregunta que había hecho hace unos días atrás con respecto a los errores que le daba a Eliza y es que todas las variables que nos da Jorge Valverde tienen que ir como bien dicen antes en la variable path, pues lo que tienen que hacer es poner todas las direcciones separadas todas por ; (punto y coma),, NOTA: no Borren lo que tiene escrito la variable path sino ponen el ; y despues las direcciones que como dice Jorge son las de tu pc,,, gracias y espero que les sirva de ayuda.... la version de JDK que utilice fue la 6 y del jpl 5.4.7

    ResponderEliminar
  15. que bueno que solucionaste el problema Eduardo,
    saludos

    ResponderEliminar
  16. Hola señor jorge mi nombre es luis y estoy haciendo un sistema experto pero necesito que prolog haga consultas en una base de datos como mysql osea conectar prolog con mysql m podria colaborar si tiene informacion gracias....

    ResponderEliminar
  17. Soy nuevo en prolog y necesito ayuda me pidieron resolver este ejemplo

    (Crear una regla en prolog que diga cuantas vocales tiene tu nombre y almacenarlas en una lista.)

    Hice que encontraran las vocales pero NO se COMO ALMACENARLO EN UNA LISTA, si me podrian ayudar muchas gracias

    vocales([a,e,i,o,u]).

    existe(L,E):- L=[X|_], X=E.
    existe(L,E):- L=[_|Y], existe(Y,E).

    contar(L1,_,C):- L1=[], C is 0.
    contar(L1,L2,C):- L1=[A|B], contar(B,L2,C1), existe(L2,A), C is C1.
    contar(L1,L2,C):- L1=[A|B], contar(B,L2,C1), not(existe(L2, A)), C is C1+1.

    inicio(L):- vocales(S), contar(L,S,C), write('numero de consonantes es '), write(C).

    ResponderEliminar
    Respuestas
    1. Hola Kevin, gracias por leer mi blog. Creo que en tu código debes enviar una lista (inicialmente vacia) como parámetro de la función contar y cada vez que se encuentra una vocal debes de insertarla en la lista. Así, al final del procedimiento, la lista tendrá todas las vocales existentes.

      saludos

      Eliminar
  18. como se utiliza el comando read de prolog en java, o como se deberia ingresar un dato desde java

    ResponderEliminar
  19. Hola !! Una pregunta esto funciona igual en win 8.1 ?? es que ya hice lo de las variables de entorno y no logra funcionar!

    ResponderEliminar

Bienvenido a jcGeorge's Blog!!!

Por favor deja tu comentario, consulta o sugerencia, procura mantener habilitado tu perfil de Blogger o deja un enlace a tu blog o web.

Gracias por leer este blog!!!

Related Posts Plugin for WordPress, Blogger...