【问题标题】:How can SWI-Prolog's modules used by default be chosen?SWI-Prolog默认使用的模块如何选择?
【发布时间】:2018-06-03 16:11:32
【问题描述】:

我收到了大量旧的程序文件集合,我想在 64 位 Linux 下使用 7.2 Swi-prolog 设置。其中大多数报告了一个

import/1: No permission to import clpfd:transpose/2 into user (already imported from ugraphs)

错误,据我所知,由于当前版本引入了默认加载 ugraph 并在用户实际指定的模块上选择它的新行为,导致命名冲突的结果。

我希望 Prolog 更喜欢显式使用的模块而不是默认模块。如果做不到这一点,我想自定义这个默认加载的模块列表。

其他答案建议从 use_module 中排除所需的谓词,然后将其与显式命名空间一起使用。由于文件的具体情况,这不是宏可实现的(转置有时用于 ugraphs 上下文、文件中描述的谓词名称或作为文本输出和 cmets 的一部分)。如果可能的话,我宁愿避免走这条路。

【问题讨论】:

    标签: swi-prolog


    【解决方案1】:

    默认情况下,SWI-Prolog autoload 标志设置为 true。您的帖子中没有足够的详细信息,但您可以尝试将其设置为 false。这将阻止任何模块的自动加载。 IE。任何使用的模块都需要显式加载。这将使您可以完全控制哪些模块被加载,最有可能需要为您的应用程序编写(或更新)加载器文件。

    【讨论】:

    • 我想我真的很想改变自动加载行为,但我认为关闭它并手动添加库是一种可行的折衷方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多