【发布时间】: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
我正在尝试创建一个名为 vertices/2 的谓词,定义为:
vertices(G, Vs):- findall(V, vertex(G, V), Vs).
当我查阅我的文件序言时给了我错误:
无权重新定义imported_procedure `ugraph:vertices/2'
如何避免重新定义?
谢谢
【问题讨论】:
标签: import prolog swi-prolog redefinition
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)
【讨论】: