3

我正在使用 SWI Prolog 作为一本数理逻辑书,这本书为 Prolog 中的一些算法提供了源代码。问题是当我尝试加载文件时,解释器只会提示如下内容:

load_files/2: No permission to load source `**' (Non-module file already loaded into module **; trying to load into io)

我查看了源代码,发现大多数文件都以:

:- module(**,[***]).

其次是

user:file_search_path(common,'../common').
:- ensure_loaded(ops).
:- ensure_loaded(def).

并且似乎使用同一个文件调用 ensure_loaded 两次会导致错误,并且如果已经加载的文件(例如 ops.pl)中的某些谓词不会在第二次尝试加载它的文件中定义。

我尝试将 ensure_loaded 更改为 use_module 并进行咨询,但没有奏效。

4

2 回答 2

1

我通过将所有 ensure_loaded 移动到一个文件来解决了这个问题。

于 2012-03-03T04:31:26.563 回答
0

我自己也遇到了这个问题。

?- [test].
Warning: test.pl:1:
        test is not a current module (created)
% test compiled 0.00 sec, 3 clauses
true.

对文件进行编辑,然后重新咨询,您将遇到问题:

test:  ?- [test].
ERROR: load_files/2: No permission to load source `test.pl' 
       (Non-module file already loaded into module user; trying to load into test)

解决方案:使用make/0

test:  ?- make.
% Updating index for library <snip>/packages/pl-6.2.2/lib/swipl-6.2.2/library/
% test compiled 0.00 sec, 2 clauses
true.

现在您的更改已加载。

于 2012-10-03T17:07:29.903 回答