java prolog embedded-language logic-programming constraint-programming

Intérprete/compilador de Prolog incorporado para Java



embedded-language logic-programming (13)

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

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.

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

  • debe ser integrable en Java (por ejemplo, puede ser incluido con mi paquete java en lugar de requerir instalaciones nativas en programas externos)
  • interfaz simple para 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 de lógica / restricción con los criterios anteriores también se adaptarían a mis necesidades.

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



Hay Mini-Kanren para Scala , que le ofrece una implementación de JVM nativa de un lenguaje de programación lógico basado en la claqueta Horn, hackable y moderna.



He necesitado hacer lo mismo hace 2 años. Usé la interfaz SWI que se llama 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 está disponible para muchas plataformas .

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


LPA ofrece el Servidor de inteligencia LPA como una forma de integrar su motor Prolog en una gran variedad de lenguajes principales, incluidos Java, .Net, etc.

Clive

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


Otra opción valiosa que encontré recientemente es 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


Prólogo de SWI Una implementación muy popular parece tener una Wikipedia que sería más fácil que usar JNI para instanciar 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 integración bastante sencillo.


Prova 3.0 http://www.prova.ws está a punto de completarse. 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.



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


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 Java y trabajar con código Java , por lo que el interopera entre los dos idiomas es trivial.


Prólogo de Amzi ha existido 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.