2012-03-01 111 views
2

我正在使用SWI Prolog编写一本数学逻辑书籍,书中提供了Prolog中一些算法的源代码。问题是,当我尝试加载一个文件,解释只是提示是这样的:SWI Prolog ensure_loaded错误

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并咨询但没有工作。

回答

1

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

0

我刚碰到这个问题。

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

对文件进行编辑,然后reconsult,你就会有问题:

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. 

现在更改被加载。