无权重新定义已导入的过程。

3

我正在尝试创建一个谓词,称为vertices/2,其定义如下:

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

当我查询我的文件时,prolog会给出以下错误提示:

无权重新定义已导入的过程“ugraph: vertices/2”

我该如何避免重新定义?

谢谢

2个回答

3
SWI-Prolog提供了一个名为ugraphs的库模块,而不是ugraph。我猜这只是一个笔误?
假设您正在与vertices/2谓词在同一上下文中加载ugraphs库模块,为什么不直接重命名您的谓词呢?例如my_vertices/2。另一个可能的选项是通过使用以下命令加载ugraphs模块,而不导入其谓词:
:- use_module(library(ugraphs), []).

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

也可能是因为其他模块的影响而不是由你明确加载ugraphs模块。如果是这种情况,请打开详细自动加载以查找模块被加载的原因:

?- set_prolog_flag(verbose_autoload, true).

1
嗨,是的,我指的是ugraphs,我尝试使用指令:use_module(library(ugraphs), [])。然后在我的谓词之前添加了文件名,比如pcmin:vertices...现在错误已经消失了。我无法更改名称,因为这是一个学校项目,我必须遵循我的教授的指示。 - Marco

-1

对于所有遇到这个错误的人,因为这是你在搜索No permission to redefine imported_procedure prolog swi时找到的第一个页面。

发生的情况可能是你创建了一个事实sumlist([],0)。,但是sumlist是模块内已经使用的名称,所以你正在修改一个已经存在的过程,你需要做的是使用一个尚未被占用的名称(例如将其称为mysumlist而不是sumlist)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接