Ответ 1
После обновления Yap до 6.2.2 JPL работает правильно. К сожалению, я не могу быть полностью уверен, что проблема действительно связана с предыдущей версией Yap, которую я использовал (6.2.0), или она была связана с чем-то другим.
Я пытаюсь использовать JPL для взаимодействия программ Java и YAP Prolog.
В моем java файле эта строка генерирует исключение:
Query query = new Query("consult", new Term[] { new Atom("test.pl") });
Исключение указано ниже:
Exception in thread "main" jpl.JPLException: this Query engine is not that which is attached to this thread
at jpl.Query.close(Query.java:511)
at jpl.Util.textToTerm(Util.java:165)
at jpl.Query.Query1(Query.java:183)
at jpl.Query.<init>(Query.java:176)
at Test.main(Test.java:12)
Хотя я не нашел кого-то, сообщающего о той же проблеме в YAP, некоторые люди сталкивались с этой проблемой с SWI, и им было рекомендовано проверить, был ли SWI скомпилирован с поддержкой многопоточности. На всякий случай я скомпилировал YAP с поддержкой многопоточности, но это не помогло.
Эта проблема происходит только в OS X, я пробовал в Ubuntu, и там все прекрасно работает.
Кто-нибудь знает обходной путь для этой проблемы в OS X?
После обновления Yap до 6.2.2 JPL работает правильно. К сожалению, я не могу быть полностью уверен, что проблема действительно связана с предыдущей версией Yap, которую я использовал (6.2.0), или она была связана с чем-то другим.
Похоже, вам нужно установить флаг специального использования для поддержки потоковой передачи в swi-prolog.
Посмотрите здесь для более подробной информации: