SWI-Prolog не может найти библиотеку pce

Я потратил целый день на это и не могу найти решение. Поскольку Google не дает никаких других подобных вопросов, я уверен, что делаю что-то не так.

У меня есть свежая полная установка swi-prolog 8.2.3.1 на Windows 10. Я убедился, что графические параметры выбраны. В основной папке swipl есть папка xpce. Когда я пытаюсь загрузить библиотеку xpce в пролог, я получаю следующую ошибку:

?- [library('pce')].
ERROR: source_sink `library(pce)' does not exist
ERROR: In:
ERROR:   [20] throw(error(existence_error(source_sink,...),_8462))
ERROR:   [16] '$resolve_source_path'(library(pce),_8494,[expand(true)]) at c:/program files/swipl/boot/init.pl:2315
ERROR:   [15] '$load_file'(library(pce),user,[expand(true)]) at c:/program files/swipl/boot/init.pl:2289
ERROR:    [9] <user>
ERROR:
ERROR: Note: some frames are missing due to last-call optimization.
ERROR: Re-run your program in debug mode (:- debug.) to get more detail.

Я попытался обратиться к файлу с :- use_module(library(pce)). и получил ту же ошибку. Я понятия не имею, как действовать дальше. Он отлично работает с ubunutu на wsl на той же машине, но без графического интерфейса, помогает только убедиться, что команды верны.

Дополнительная информация о результатах решения @david-tonhofer:

У меня есть этот файл в "C:\Program Files\swipl\xpce\prolog\lib". Итак, я попробовал следующее:

?- file_search_path(library,X).
X = app_config(lib) ;
X = swi(library) ;
X = swi(library/clp) ;
false.

2 ?- assertz(file_search_path(library,pce('prolog/lib'))).           
true.

3 ?- file_search_path(library,X).
X = app_config(lib) ;
X = swi(library) ;
X = swi(library/clp) ;
X = pce('prolog/lib').

4 ?- file_search_path(library,pce('prolog/lib')).
true.

5 ?- file_search_path(pce,X).
false.

6 ?- assertz(file_search_path(pce,'C:/Program Files/swipl/xpce/')).           
true.

7 ?- file_search_path(pce,X).
X = 'C:/Program Files/swipl/xpce/'.

8 ?- use_module(library(pce)).
true.
Почему в Python есть оператор &quot;pass&quot;?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
0
983
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Должен быть файл

./swiplexe_8.3.14/lib/swipl/xpce/prolog/lib/pce.pl

в вашем установочном каталоге.

Вызов

?- use_module(library(pce)).

на верхнем уровне Пролога или

:- use_module(library(pce)).

указывает ему загрузить pce.pl, найденный в пути к библиотеке.

Возможно, ваш путь к библиотеке неполный....

Проконсультируйтесь с вашим путем поиска, выполнив

?- file_search_path(library,X).

X = app_config(lib) ;
X = swi(library) ;
X = swi(library/clp) ;
X = pce('prolog/lib').   <--- should be there

Расширьте путь поиска, выдав

?- assertz(file_search_path(library,SOME_PATH_AS_STRING_OR_ATOM)).

Однако факт

file_search_path(library,pce('prolog/lib')).

указывает на двухуровневый поиск.

Нам также нужно убедиться, что pce установлен:

У меня есть это:

?- file_search_path(pce,X).
X = '/usr/local/logic/swiplexe_8.3.14/lib/swipl/xpce'.

Поэтому может потребоваться выпуск

?- assertz(file_search_path(pce,DIR_OF_XPCE_AS_STRING_OR_ATOM)).

@vaeng Пожалуйста, попробуйте установить факт file_search_path(pce,DIR_OF_XPCE_AS_STRING_OR_ATOM); это может быть решением

David Tonhofer 20.12.2020 18:51

@vaeng Убедитесь, что у вас есть pce('prolog/lib')., а не pce('xpce/prolog/lib'). в file_search_path/1.

David Tonhofer 20.12.2020 19:00

И вход для pce должен остановиться на C:/Program Files/swipl/xpce/

David Tonhofer 20.12.2020 19:01

Спасибо. Это сработало. Когда я начинаю еще один сеанс swipl, все это пропало. Есть ли способ сохранить его навсегда?

vaeng 20.12.2020 19:12

@vaeng Да, есть init.pl, который читается при запуске сессии: См. файл инициализации пользователя. Добавьте туда директивы :- ... В настоящее время у меня ничего нет в этом файле, поэтому я не знаю, почему он работает у меня из коробки.

David Tonhofer 20.12.2020 19:19

Да, это сработало. Большое спасибо. Это была настоящая большая головная боль, чтобы решить. Я надеюсь, что это может помочь другим, у вас есть аналогичная проблема.

vaeng 20.12.2020 19:29

Запуск следующих двух строк будет работать:

assertz(file_search_path(library,pce('prolog/lib'))).
assertz(file_search_path(pce,swi(xpce))).

Во второй строке «swi» относится к корневой папке swipl. Если вы хотите проверить все пути, вот пример:

?- file_search_path(X,Y).
X = swi,
Y = 'c:/program files/swipl' ;
X = library,
Y = app_config(lib) ;
X = library,
Y = swi(library) ;
X = library,
Y = swi(library/clp) .

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