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

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

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

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

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


person Sami    schedule 29.11.2009    source источник
comment
Я никогда не использовал Prolog-in-Java, но есть другой вариант - написать свой собственный. Я знаю как минимум две книги по Lisp, которые делают это на небольшом количестве страниц (On Lisp и PAIP), так что это не может быть так даже на Java.   -  person Ken    schedule 30.11.2009
comment
Конечно, вы можете создать игрушечный язык программирования логики на нескольких страницах кода, но я ищу что-то более надежное. Теперь вы можете сделать игрушечную шепелявку и на нескольких страницах кода, так что я думаю, мне нужно всего четыре страницы, и я буду в порядке :-)   -  person Sami    schedule 30.11.2009
comment
Это какие-то напыщенные слова, которые вы разбрасываете! Я не уверен, что делает небольшую реализацию Пролога игрушкой или в чем она недостаточно надежна. Одним из уроков Норвига было то, что Пролог в основных моментах похож на Лисп; Таким образом, крошечный Prolog-on-Lisp - это не игрушка, а, скорее, другой пользовательский интерфейс для вашего компилятора. На Java это будет не так весело, но я не думаю, что он так много делал с макросами.   -  person Ken    schedule 05.12.2009
comment
1. Никаких библиотек. 2. Нет синтаксиса. В то время как с Лиспом вы можете повторно использовать синтаксис Лиспа и библиотеки Лиспа (Пролог похож на Лисп в основных моментах), в Java это не так. Вместо этого вам придется также реализовать синтаксический анализатор и библиотеки. Кроме того, даже с реализацией Лиспа, отсутствие использования синтаксиса и библиотек Пролога не позволяет вам использовать какие-либо доступные извне библиотеки Пролога.   -  person Sami    schedule 05.12.2009
comment
Конечно, вы можете утверждать, что вы можете повторно использовать синтаксис и библиотеки Java таким же образом, как если бы вы использовали анонимные объекты вместо замыканий. Но, как знает любой, кто пробовал это делать с опытом функционального программирования, дополнительная сложность и многословность синтаксиса делает это в основном болезненным занятием.   -  person Sami    schedule 05.12.2009
comment
Вы пробовали Drools? Это полноценная производственная система (rete) на Java, которую легко развернуть. jboss.org/drools   -  person ProfVersaggi    schedule 18.01.2014


Ответы (13)


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

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

person Chip Uni    schedule 29.11.2009
comment
TuProlog кажется единственным из них, который не требует предварительной установки каких-либо внешних приложений. Я займусь этим. Спасибо. - person Sami; 30.11.2009
comment
Мне очень нравится TuProlog. Документация может быть не такой уж и актуальной, но реализация довольно приятная и, как вы сказали, не требует смешивания. - person JUST MY correct OPINION; 03.03.2010
comment
В Википедии перечислено гораздо больше систем Prolog с интерфейсом Java: JIProlog, Jekejeke Prolog, JLog, jTrolog, XSB Prolog, YAP Prolog. - person Mostowski Collapse; 24.10.2012
comment
TuProlog великолепен, может быть встроен и довольно гибок. Портировал на Андроид. - person ProfVersaggi; 18.01.2014

Пролог SWI. Очень популярная реализация, похоже, имеет интерфейс Java, как и SiCStus, что было бы проще, чем использовать JNI для создания экземпляра в вашем Java-процессе. Я использовал оба из C довольно давно и рекомендую их. Я предпочитаю SWI, так как это открытый исходный код и, по моему опыту, реализация де-факто.

Документация по Java-интерфейсу SWI кажется адекватной, а процесс встраивания довольно прост.

person Hassan Syed    schedule 29.11.2009
comment
Для использования SWI Prolog и SiCStus из Java требуется встроенная установка. - person Sami; 30.11.2009
comment
Я уверен, что вы можете упаковать исполняемые файлы или библиотеки DLL для включения в ваши файлы JAR. SWI начался как приложение unix, поэтому я бы предположил, что он не выполняет того, что требуется реальным установщикам, например, вносит изменения в реестр или устанавливает объекты com. - person Hassan Syed; 30.11.2009

Мне нужно было сделать то же самое 2 года назад. Я использовал интерфейс SWI, который называется JPL. Он позволяет загружать файл Prolog, утверждать его и запрашивать по нему. Требуется установка SWI Prolog, но это совсем не проблема. SWI Prolog доступен для многих платформ.

Я также пробовал альтернативы, которые были полностью реализованы на Java и не требовали внешних программ. Все они были глючными или трудными в использовании. Не трать время зря.

person Juanjo Conti    schedule 30.11.2009

пролог Amzi существует уже давно. Я использовал его ненадолго, но не встроенную версию. однако у них есть хорошая документация и можно купить поддержку. У них есть порт Java, так что, возможно, стоит взглянуть.

person Vincent Ramdhanie    schedule 29.11.2009

Clojure - это Lisp-подобный язык на основе JVM с библиотекой (core.logic), поддерживающий программирование на основе логики и ограничений. Clojure также имеет большое количество средств для создания классов Java и работы с кодом Java, поэтому взаимодействие между ними языков тривиально.

person deterb    schedule 22.12.2011

LPA действительно предлагает LPA Intelligence Server как способ встраивания своего механизма Prolog в целый ряд основных языков, включая Java, .Net и т. Д.

Клайв

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

person clive spenser    schedule 22.03.2010

Два коммерческих пролога, написанные на Java: Minerva от IF Computer Japan и Jekejeke. Оба очень близки к ISO.

person false    schedule 06.07.2011

Вы также можете взглянуть на созданный мной движок Prol. Это позволяет вам встраивать Пролог в ваши Java-программы (но это не очень быстро)

person Igor M.    schedule 05.07.2011

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

person alexk    schedule 21.01.2010

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

person Charles Stewart    schedule 03.03.2010

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

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

person Sami    schedule 13.04.2010

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

person Michael    schedule 21.04.2010

Проф. Пол Тарау сделал доступным на своей странице несколько реализаций

Jinni Prolog

Пролог ядра

person CapelliC    schedule 20.11.2013