41

Estoy trabajando en una aplicación en Java, que necesita hacer algunas deducciones de reglas lógicas complejas como parte de su funcionalidad. Me gustaría codificar mis deducciones lógicas en Prolog o algún otro lenguaje de programación de lógica/restricción, en lugar de Java, ya que creo que el código resultante será significativamente más simple y más fácil de mantener.Intérprete/compilador Prolog integrado para Java

Busqué en Google las implementaciones de Java incrustadas en Prolog, y encontré el número de ellas, cada una con muy poca documentación. Mis criterios (modesta) de selección son:

  • debe ser integrable en Java (por ejemplo, se pueden agrupar con mi paquete de java en lugar de requerir ninguna instalación nativos en programas externos)
  • interfaz fácil de usar desde Java (por iniciar deducciones, inspeccionar resultados y agregar reglas)
  • vienen con al menos algunos ejemplos sobre cómo usarlo
  • no necesariamente tiene que ser Prolog, pero otros lenguajes de programación de lógica/restricción con los criterios anteriores se adaptarían mis necesidades, también.

¿Qué opciones tengo y cuáles son sus ventajas y desventajas?

+1

nunca he utilizado un prólogo-en-Java, pero otra opción es escribir el suyo propio. Sé de al menos 2 libros Lisp que hacen esto en no demasiadas páginas (On Lisp y PAIP), por lo que no puede ser * that * hard, incluso en Java. – Ken

+4

Claro, puedes hacer un lenguaje de programación de lógica de juguete en unas pocas páginas de código, pero estoy buscando algo un poco más robusto. Ahora, puedes hacer un ceceo de juguete en un par de páginas de código también, así que supongo que solo necesitaré cuatro páginas y estaré listo para ir :-) – Sami

+0

¡Estas son algunas palabras cargadas que estás lanzando! No estoy seguro de qué hace que una pequeña implementación de Prolog sea un "juguete", o de qué manera no son lo suficientemente "robustas". Una de las lecciones de Norvig fue "Prolog es similar a Lisp en los puntos principales"; un pequeño Prolog-on-Lisp, entonces, no es un "juguete", sino una interfaz de usuario diferente para su compilador. No será tan divertido en Java, pero no creo que estuviera haciendo * tanto * con macros. – Ken

Respuesta

21

De acuerdo con Wikipedia, las siguientes versiones de Prolog tienen interfaces Java. Me he vinculado a las páginas principales para ellos:

¡Buena suerte con su búsqueda!

+0

TuProlog parece ser el único de estos que no requiere que se instalen primero las aplicaciones externas. Voy a investigar eso. Gracias. – Sami

+0

Me gusta TuProlog mucho. Es posible que la documentación no sea tan buena, pero la implementación es bastante buena y, como dijiste, no es necesario mezclar cosas. –

+2

Wikipedia enumera muchos más sistemas Prolog con interfaz Java: JIProlog, Jekejeke Prolog, JLog, jTrolog, XSB Prolog, YAP Prolog. –

7

SWI prolog Una implementación muy popular parece tener un Java interface as does SiCStus que sería más fácil que usar JNI para crear una instancia en su proceso de Java. He usado ambos de C hace bastante tiempo y los recomiendo. Mi preferencia sería SWI, ya que es de código abierto y, desde mi experiencia, la implementación de facto.

La documentación para la interfaz Java de SWI parece ser adecuada, y el proceso de incorporación bastante sencillo.

+1

SWI Prolog y SiCStus requieren que la instalación nativa sea utilizable desde Java. – Sami

+2

Estoy seguro de que puede empaquetar los archivos ejecutables o DLL para ser incluidos en sus archivos JAR. SWI comenzó como una aplicación de Unix, así que asumí que no hace las cosas que requieren los instaladores reales, es decir, realizar cambios en el registro o instalar objetos com. –

3

Amzi prolog ha estado presente por un tiempo. Lo he usado brevemente pero no la versión incrustada. sin embargo, tienen buena documentación y se puede comprar soporte. Tienen puerto Java, por lo que valdría la pena echarle un vistazo.

5

He tenido que hacer lo mismo hace 2 años. Usé SWI interface which is called JPL. Le permite cargar un archivo Prolog, afirmarlo y consultar sobre él. Requiere una instalación de SWI Prolog, pero eso no es problema en absoluto. SWI Prolog es available for many platforms.

También probé alternativas que se implementaron al 100% en Java y no requerían programas externos. Todos ellos tenían errores o eran difíciles de usar. No pierdas tu tiempo.

+1

y también funciona para YAP Prolog – Sergio

1

Prova 3.0 http://www.prova.ws está por terminarse. Sin embargo, no es solo otro Prolog sino una combinación de estilos de programación, en particular, útil para la integración bidireccional de Java, la programación de agente reactivo, la integración con ESB, la lógica de flujo de trabajo y el procesamiento de eventos. Esta versión es una reescritura completa desde cero, por lo que algunas características más antiguas, como la integración OWL, faltan, pero están destinadas a regresar en la próxima revisión.

1

Hay Mini-Kanren for Scala, que le ofrece una implementación nativa de JVM de un lenguaje de programación lógico basado en Horn-clause esbelto, hackable y moderno.

2

LPA sí ofrece el servidor de LPA Inteligencia como una forma de incrustar su motor de Prolog dentro de toda una variedad de idiomas principales incluyendo Java, .Net, etc.

Clive

http://www.lpa.co.uk/int.htm

1

Otra opción que vale la pena I Recientemente me encontré con JSetL. No es un Prolog, sino una biblioteca de programación de restricciones para Java, con soporte para variables lógicas, unificación , resolución de restricciones y no determinismo.

http://prmat.math.unipr.it/~gianfr/JSetL/index.html

2

También puede echar un vistazo a the Prol engine que creé. Le permite incrustar Prolog en sus programas Java (pero no es muy rápido)

2

Dos Prologs comerciales escritos en Java: Minerva por IF Computer Japan y Jekejeke. Ambos están muy cerca de ISO.

2

Clojure es un lenguaje parecido a Lisp basado en JVM con una biblioteca (core.logic) que admite lógica y programación basada en restricciones. Clojure también tiene una gran cantidad de instalaciones para generar clases de Java y working with java code, por lo que la interoperabilidad entre los dos idiomas es trivial.