Встроенный интерпретатор пролога / компилятор для Java
Я работаю над приложением на Java, которое должно делать некоторые сложные логические выводы в рамках своей функциональности. Я хотел бы закодировать мои логические выводы в Prolog или каком-либо другом языке программирования логики / ограничений вместо Java, так как я считаю, что полученный код будет значительно проще и более удобен в обслуживании.
Я гуглил для встроенных реализаций Java на Prolog, и нашел их несколько, каждая с очень небольшим количеством документации. Мои (скромные) критерии выбора:
- должен быть встраиваемым в Java (например, может быть связан с моим пакетом java вместо необходимости каких-либо собственных установок на внешние программы)
- простой интерфейс для использования из Java (для инициирования выводов, проверки результатов и добавления правил)
- Приведите хотя бы несколько примеров того, как его использовать.
- не обязательно должен быть прологом, но другие языки программирования логики / ограничения с вышеуказанными критериями тоже подойдут мне.
Какие у меня есть выбор и каковы их преимущества и недостатки?
13 ответов
Согласно Википедии, следующие версии Prolog имеют интерфейсы Java. Я связался с основными страницами для них:
- BProlog
- Чао Пролог
- SICStus Пролог
- SWI Пролог
- TuProlog (реализован на Java)
- LPA Пролог
Удачи в вашем поиске!
Пролог SWI Очень популярная реализация, похоже, имеет интерфейс Java, как и SiCStus, что было бы проще, чем использование JNI для создания экземпляра в вашем Java-процессе. Я использовал оба из C довольно давно и рекомендую их. Моим предпочтением будет SWI, так как он с открытым исходным кодом, а из моего опыта - фактическая реализация.
Документация по Java-интерфейсу SWI кажется адекватной, и процесс внедрения довольно прост.
Мне нужно было сделать то же самое 2 года назад. Я использовал интерфейс SWI, который называется JPL. Это позволяет загружать файл Prolog, утверждать его и запрашивать его. Требуется установка SWI Prolog, но это совсем не проблема. SWI Prolog доступен для многих платформ.
Я также пробовал альтернативы, которые были полностью реализованы на Java и не требовали внешних программ. Все они были глючными или сложными в использовании. Не трать свое время.
Clojure - это Lisp-подобный язык на основе JVM с библиотекой ( core.logic), поддерживающей логику и программирование на основе ограничений. Clojure также имеет большое количество средств для генерации Java-классов и работы с Java-кодом, поэтому взаимодействие между двумя языками тривиально.
Пролог Amzi был вокруг некоторое время. Я использовал это кратко, но не встроенную версию. однако у них есть хорошая документация, и поддержку можно купить. У них есть порт Java, так что это может стоить посмотреть.
Вы также можете взглянуть на созданный мной движок Prol. Это позволяет встраивать Prolog в ваши Java-программы (но это не очень быстро)
Два коммерческих Пролога, написанных на Java: Minerva от IF Computer Japan и Jekejeke. Оба очень близки к ISO.
Профессор Пол Тарау сделал доступным со своей страницы несколько реализаций
LPA действительно предлагает LPA Intelligence Server как способ встраивания его движка Prolog в целый ряд основных языков, включая Java, .Net и т. Д.
Clive
Еще одна полезная опция, с которой я недавно столкнулся, - это JSetL. Это не Prolog, а библиотека программирования ограничений для Java с поддержкой логических переменных, унификации, решения ограничений и недетерминизма.
Существует несколько реализаций Пролога на Java. Они не очень быстрые, но удобные для использования из Java. Примеры: TuProlog или PrologCafe. Вы также можете взглянуть на следующую дипломную работу бакалавра на тему " Выполнение и анализ программ Prolog на Java".
Есть Mini-Kanren для Scala, который дает вам нативную реализацию JVM в простом, взломанном, современном языке логики программирования, основанном на клаузлах Хорна.
Prova 3.0 http://www.prova.ws/ близится к завершению. Это, однако, не просто еще один Prolog, а сочетание стилей программирования, в частности, полезное для простой двунаправленной интеграции Java, программирования реактивных агентов, интеграции с ESB, логики рабочих процессов и обработки событий. Эта версия полностью переписана с нуля, поэтому некоторые старые функции, такие как интеграция OWL, отсутствуют, но обязательно вернутся в следующей версии.