Встроенный интерпретатор пролога / компилятор для Java

Я работаю над приложением на Java, которое должно делать некоторые сложные логические выводы в рамках своей функциональности. Я хотел бы закодировать мои логические выводы в Prolog или каком-либо другом языке программирования логики / ограничений вместо Java, так как я считаю, что полученный код будет значительно проще и более удобен в обслуживании.

Я гуглил для встроенных реализаций Java на Prolog, и нашел их несколько, каждая с очень небольшим количеством документации. Мои (скромные) критерии выбора:

  • должен быть встраиваемым в Java (например, может быть связан с моим пакетом java вместо необходимости каких-либо собственных установок на внешние программы)
  • простой интерфейс для использования из Java (для инициирования выводов, проверки результатов и добавления правил)
  • Приведите хотя бы несколько примеров того, как его использовать.
  • не обязательно должен быть прологом, но другие языки программирования логики / ограничения с вышеуказанными критериями тоже подойдут мне.

Какие у меня есть выбор и каковы их преимущества и недостатки?

13 ответов

Решение

Согласно Википедии, следующие версии Prolog имеют интерфейсы Java. Я связался с основными страницами для них:

Удачи в вашем поиске!

Пролог 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

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

Еще одна полезная опция, с которой я недавно столкнулся, - это JSetL. Это не Prolog, а библиотека программирования ограничений для Java с поддержкой логических переменных, унификации, решения ограничений и недетерминизма.

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

Существует несколько реализаций Пролога на Java. Они не очень быстрые, но удобные для использования из Java. Примеры: TuProlog или PrologCafe. Вы также можете взглянуть на следующую дипломную работу бакалавра на тему " Выполнение и анализ программ Prolog на Java".

Есть Mini-Kanren для Scala, который дает вам нативную реализацию JVM в простом, взломанном, современном языке логики программирования, основанном на клаузлах Хорна.

Prova 3.0 http://www.prova.ws/ близится к завершению. Это, однако, не просто еще один Prolog, а сочетание стилей программирования, в частности, полезное для простой двунаправленной интеграции Java, программирования реактивных агентов, интеграции с ESB, логики рабочих процессов и обработки событий. Эта версия полностью переписана с нуля, поэтому некоторые старые функции, такие как интеграция OWL, отсутствуют, но обязательно вернутся в следующей версии.

Другие вопросы по тегам