3

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

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

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

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

如何避免重新定义?

谢谢

4

2 回答 2

3

SWI-Prolog 提供了一个ugraphs库模块,而不是ugraph. 我认为这只是一个错字?

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

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

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

也可能ugraphs是您没有明确加载该模块,而是由于您可能正在加载的其他模块。如果是这种情况,请打开详细自动加载以找出加载模块的原因:

?- set_prolog_flag(verbose_autoload, true).
于 2018-07-04T18:41:16.297 回答
-1

对于收到此错误的其他所有人,因为这是您搜索No permission to redefine imported_procedure prolog swi.

发生在您身上的事情可能是您创建了一个事实sumlist([],0).,但是 sumlist 是一个已在模块中使用的名称,因此您正在修改一个已经存在的过程,您要做的是使用尚未使用的名称(例如例如调用它mysumlist而不是sumlist)

于 2021-08-17T10:23:58.177 回答