我正在尝试创建一个称为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).

10-01 06:11