【问题标题】:SWI Prolog ensure_loaded errorSWI Prolog ensure_loaded 错误
【发布时间】:2012-03-01 14:44:31
【问题描述】:

我正在使用 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 并咨询但没有奏效。

【问题讨论】:

  • 我也遇到了这个问题,我试过用reconsult替换ensure_loaded,但是错误依旧存在。

标签: module prolog swi-prolog


【解决方案1】:

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

【讨论】:

  • 我没有尝试这种方法,因为有几个文件包含ensure_loaded。这听起来更像是一种解决方法。
【解决方案2】:

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

?- [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.

现在您的更改已加载。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 2021-02-26
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多