我正在尝试创建一个谓词,称为vertices/2
,其定义如下:
vertices(G, Vs):- findall(V, vertex(G, V), Vs).
当我查询我的文件时,prolog会给出以下错误提示:
无权重新定义已导入的过程“ugraph: vertices/2”
我该如何避免重新定义?
谢谢
我正在尝试创建一个谓词,称为vertices/2
,其定义如下:
vertices(G, Vs):- findall(V, vertex(G, V), Vs).
当我查询我的文件时,prolog会给出以下错误提示:
无权重新定义已导入的过程“ugraph: vertices/2”
我该如何避免重新定义?
谢谢
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
)。