Ответ 1
Я бы дал GNU Prolog для Java. На веб-сайте:
GNU Prolog для Java - это реализация ISO Prolog как библиотеки Java
В контексте приложения Java/Eclipse я хотел бы использовать Prolog для конкретной задачи. Каковы доступные решения и инструменты для этого, а также связанные с ними и минусы?
Я могу запустить внешний интерпретатор Prolog, генерирующий результат в файле? Я могу использовать полную библиотеку Prolog Java (интерпретатор Prolog, реализованный в java)? Я могу использовать java-библиотеку, предназначенную для связи с внешним интерпретатором Prolog?
Заранее благодарим за помощь,
Мана
Я бы дал GNU Prolog для Java. На веб-сайте:
GNU Prolog для Java - это реализация ISO Prolog как библиотеки Java
Я использую tuProlog Официальный сайт, Кодовый репозиторий на Android, У них есть большой встроенный Prolog в форме на 1 Jar File. Они тоже отзывчивы!
Быстрый google возвращает список опций (увы, не обновляется через 5 лет).
Что касается плюсов/минусов - как я вижу это
Собственный движок с привязками будет худшим вариантом, когда дело доходит до распространения и интеграции, но может быть быстрее, чем родные Java-движки (но сначала я хотел бы получить подтверждение).
Java-механизм с API приведет к некоторой неловкости в точках интеграции, но его следует легко распространять.
Компилятор Prolog to bytecode должен хорошо разбираться в интеграции между двумя языками и будет означать, что вы не отправляете прологи-скрипты с двоичным кодом (может быть недостатком). Большой недостаток в этом - ничто все еще не кажется живым.
Пролог-подобный язык для компилятора байт-кода, такой же, как и выше, но некоторые все еще, похоже, плавают, а также требуют знания нового языка.
Механизм правил Java - я считаю это самым опрятным решением. Вместо того, чтобы использовать два языка, кодируйте правила в режиме Java-y, но это зависит от того, насколько сложны правила для выражения таким образом.
Вторая вещь, которую следует учитывать, - это проект, который все еще обновляется. Из моего быстрого Google немного. Prova и Mandarax являются двумя исключениями из последние варианты.
При просмотре многопоточных систем Prolog существуют разные дополнительные соображения. Один желающий должен иметь разделение между потоками и логическими двигателями. Это было выражено здесь: http://www.cs.nmsu.edu/ALP/2011/03/concurrent-programming-constructs-and-first-class-logic-engines/
Есть некоторые системы Пролога, которые реализуют это разделение. Jekejeke Пролог также входит в число этих систем. Существует отчет (*), который показывает как это разделение можно использовать. В различных сценариях мы видим, что "поток" обеспечивается системой, внешней по отношению к логический движок:
С наилучшими пожеланиями
http://www.jekejeke.ch/idatab/doclet/prod/en/docs/05_run/15_stdy/08_deploy/package.html
Вы также можете взглянуть на JPL http://www.swi-prolog.org/FAQ/Java.html