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?
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
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
¡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