2012-03-01 118 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. 

現在更改被加載。