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 を 2 回呼び出すとエラーが発生したようで、既にロードされているファイル (ops.pl など) の一部の述語が、2 回目にロードしようとしたファイルで定義されていない場合。

ensure_loaded を use_module に変更して相談しようとしましたが、うまくいきませんでした。

4

2 に答える 2

1

すべての ensure_loaded を 1 つのファイルに移動することで問題を解決しました。

于 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 に答える