我正在尝试创建一个称为vertices/2定义为的谓词:
vertices(G, Vs):- findall(V, vertex(G, V), Vs).
当我查阅我的文件序言时,我给出了错误:
无权重新定义imported_procedure `ugraph:vertices/2'
如何避免重新定义?
谢谢
我正在尝试创建一个称为vertices/2定义为的谓词:
vertices(G, Vs):- findall(V, vertex(G, V), Vs).
当我查阅我的文件序言时,我给出了错误:
无权重新定义imported_procedure `ugraph:vertices/2'
如何避免重新定义?
谢谢
SWI-Prolog 提供了一个ugraphs库模块,而不是ugraph. 我认为这只是一个错字?
假设您ugraphs在与谓词相同的上下文中加载库模块vertices/2,为什么不简单地重命名您的谓词?例如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)