无权重新定义 imported_procedure

No permission to redefine imported_procedure

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

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

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

No permission to redefine imported_procedure `ugraph:vertices/2'

如何避免重新定义?

谢谢

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

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

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

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

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

?- set_prolog_flag(verbose_autoload, true).

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

时找到的第一页

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