【问题标题】:No permission to redefine imported_procedure无权重新定义imported_procedure
【发布时间】:2018-07-04 14:54:25
【问题描述】:

我正在尝试创建一个名为 vertices/2 的谓词,定义为:

vertices(G, Vs):- findall(V, vertex(G, V), Vs).

当我查阅我的文件序言时给了我错误:

无权重新定义imported_procedure `ugraph:vertices/2'

如何避免重新定义?

谢谢

【问题讨论】:

    标签: import prolog swi-prolog redefinition


    【解决方案1】:

    SWI-Prolog 提供 ugraphs 库模块,而不是 ugraph。我想这只是一个错字?

    假设您在与vertices/2 谓词相同的上下文中加载ugraphs 库模块,为什么不简单地重命名您的谓词呢?例如。 my_vertices/2。另一种可能的选择是让您加载 ugraphs 模块而不使用导入其谓词:

    :- use_module(library(ugraphs), []).
    

    这将解决冲突,但还需要您使用显式限定来调用 ugraphs 模块谓词。

    也可能是ugraphs 模块不是由您显式加载的,而是您可能正在加载的其他模块的结果。如果是这种情况,请打开详细自动加载以找出加载模块的原因:

    ?- set_prolog_flag(verbose_autoload, true).
    

    【讨论】:

    • 嗨,是的,我的意思是 ugraphs,我尝试使用指令:- use_module(library(ugraphs), [])。我在谓词之前添加了文件的名称,例如 pcmin:vertices... 现在错误消失了。我无法更改名称,因为这是一个学校项目,我必须听从教授的指示
    【解决方案2】:

    对于遇到此错误的其他所有人,因为这是您搜索 No permission to redefine imported_procedure prolog swi 时找到的第一页。

    发生在你身上的可能是你创建了一个事实为sumlist([],0).,但是 sumlist 是一个已经在模块中使用的名称,所以你正在修改一个已经存在的过程,你要做的就是使用一个名称尚未使用(例如将其称为 mysumlist 而不是 sumlist

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2020-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      相关资源
      最近更新 更多