Intérprete/compilador de Prolog incrustado para Java


Estoy trabajando en una aplicación en Java, que necesita hacer algunas deducciones complejas de reglas lógicas como parte de su funcionalidad. Me gustaría codificar mis deducciones lógicas en Prolog o algún otro lenguaje de programación logic / constraint, en lugar de Java, ya que creo que el código resultante será significativamente más simple y más mantenible.

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

  • debe ser incrustable en Java (por ejemplo, puede ser incluido con mi paquete java en lugar de requerir cualquier instalación nativa en programas externos)
  • interfaz sencilla de usar desde Java (para iniciar deducciones, inspeccionar resultados y agregar reglas)
  • ven con al menos algunos ejemplos sobre cómo usarlo
  • no necesariamente tiene que ser Prolog, pero otros lenguajes de programación logic/constraint con los criterios anteriores se adaptarían a mis necesidades, demasiado.

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

Author: false, 2009-11-30

13 answers

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

Buena suerte con tu búsqueda!

 22
Author: Chip Uni,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-04 14:16:46

SWI prolog Una implementación muy popular parece tener una interfaz Java al igual que SICStus que sería más fácil que usar JNI para instanciar una instancia en su proceso 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 incrustación es bastante sencillo.

 8
Author: Hassan Syed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-29 22:43:48

He necesitado hacer lo mismo hace 2 años. Usé interfaz SWI que se llama JPL. Le permite cargar un archivo Prolog, afirmarlo y consultarlo. Se requiere una instalación de SWI Prolog, pero eso no es problema en absoluto. SWI Prolog está disponible para muchas plataformas.

También he probado alternativas que estaban 100% implementadas en Java y no requerían programas externos. Todos ellos eran buggy o difícil de usar. No pierdas el tiempo.

 6
Author: Juanjo Conti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-30 16:30:10

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

 4
Author: Vincent Ramdhanie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-29 22:51:05

LPA ofrece el servidor de Inteligencia LPA como una forma de incrustar su motor Prolog dentro de una gran variedad de lenguajes principales, incluidos Java,. Net, etc

Clive

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

 3
Author: clive spenser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-22 12:28:51

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

 3
Author: false,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-06 05:16:44

Clojure es un lenguaje similar a Lisp basado en JVM con una biblioteca (core.logic) soporta programación basada en lógica y restricciones. Clojure también tiene un gran número de facilidades para generar clases java y trabajar con código java, por lo que la inter-op entre los dos lenguajes es trivial.

 3
Author: deterb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-22 18:04:37

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

 3
Author: Igor M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-10 12:44:26

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

 2
Author: alexk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-21 19:16:17

Está Mini-Kanren para Scala, que le da una implementación nativa de JVM de un lenguaje de programación lógico moderno basado en cláusulas Horn.

 2
Author: Charles Stewart,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-03-03 10:02:48

Otra opción que vale la pena que encontré recientemente es JSetL. No es un Prolog, pero 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
Author: Sami,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-13 13:20:38

Hay varias implementaciones de Prolog en Java. No son terriblemente rápidos, pero son convenientes de usar desde dentro de Java. Los ejemplos son: TuProlog o PrologCafe También puede echar un vistazo a la siguiente tesis de grado sobre el tema de Ejecución y Análisis de Programas Prolog en Java.

 2
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-21 06:36:15

El Prof. Paul Tarau puso a disposición de su página varias implementaciones

Jinni Prolog

Kernel Prolog

 2
Author: CapelliC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-22 00:38:15