微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SWI-Prolog 找不到 pce 库

如何解决SWI-Prolog 找不到 pce 库

我为此浪费了整整一天,但找不到解决方案。由于 Google 没有提供任何其他类似的问题,我敢肯定我一定是做错了什么。

我在 Windows 10 上全新完整安装了 swi-prolog 8.2.3.1。我确保选择了图形选项。主 swipl 文件夹中有一个 xpce 文件夹。当我尝试将 xpce lib 加载到 prolog 中时,出现以下错误

?- [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)).文件并得到同样的错误。我不知道如何继续。它在同一台机器上的 wsl 上与 ubunutu 一起工作得很好,但没有任何图形界面,它只能帮助确保命令正确。

有关@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.

解决方法

应该有一个文件

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

在您的安装目录中。

打电话

?- use_module(library(pce)).

在 Prolog 的顶层或

:- 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)).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。