Как использовать Prolog из Java?

В контексте приложения Java/Eclipse я хотел бы использовать Prolog для конкретной задачи. Каковы доступные решения и инструменты для этого, а также связанные с ними и минусы?

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

Заранее благодарим за помощь,

Мана

Ответы

Ответ 1

Я бы дал GNU Prolog для Java. На веб-сайте:

GNU Prolog для Java - это реализация ISO Prolog как библиотеки Java

Ответ 3

Быстрый google возвращает список опций (увы, не обновляется через 5 лет).

Что касается плюсов/минусов - как я вижу это Собственный движок с привязками будет худшим вариантом, когда дело доходит до распространения и интеграции, но может быть быстрее, чем родные Java-движки (но сначала я хотел бы получить подтверждение). Java-механизм с API приведет к некоторой неловкости в точках интеграции, но его следует легко распространять.
Компилятор Prolog to bytecode должен хорошо разбираться в интеграции между двумя языками и будет означать, что вы не отправляете прологи-скрипты с двоичным кодом (может быть недостатком). Большой недостаток в этом - ничто все еще не кажется живым.
Пролог-подобный язык для компилятора байт-кода, такой же, как и выше, но некоторые все еще, похоже, плавают, а также требуют знания нового языка.
Механизм правил Java - я считаю это самым опрятным решением. Вместо того, чтобы использовать два языка, кодируйте правила в режиме Java-y, но это зависит от того, насколько сложны правила для выражения таким образом.

Вторая вещь, которую следует учитывать, - это проект, который все еще обновляется. Из моего быстрого Google немного. Prova и Mandarax являются двумя исключениями из последние варианты.

Ответ 4

При просмотре многопоточных систем Prolog существуют разные дополнительные соображения. Один желающий должен иметь разделение между потоками и логическими двигателями. Это было выражено здесь: http://www.cs.nmsu.edu/ALP/2011/03/concurrent-programming-constructs-and-first-class-logic-engines/

Есть некоторые системы Пролога, которые реализуют это разделение. Jekejeke Пролог также входит в число этих систем. Существует отчет (*), который показывает как это разделение можно использовать. В различных сценариях мы видим, что "поток" обеспечивается системой, внешней по отношению к логический движок:

  • Развертывание терминалов: Thread - основной поток Java.
  • Автономное развертывание: поток - это поток AWT/Swing.
  • Развертывание апплетов: поток - это часть потока браузера.
  • Развертывание сервлета: поток поступает из пула веб-серверов.
  • Развертывание клиента: поток - это поток AWT/Swing.

С наилучшими пожеланиями

http://www.jekejeke.ch/idatab/doclet/prod/en/docs/05_run/15_stdy/08_deploy/package.html