无权重新定义imported_procedure

时间:2018-07-04 14:54:26

标签: import prolog swi-prolog redefinition

我正试图创建一个称为vertices/2的谓词,定义为:

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

当我查阅文件序言时,出现错误:

  

无权重新定义imported_procedure`ugraph:vertices / 2'

如何避免重新定义?

谢谢

1 个答案:

答案 0 :(得分:3)

SWI-Prolog提供ugraphs库模块,而不是ugraph。我认为那只是一个错字?

假设您要在与ugraphs谓词相同的上下文中加载vertices/2库模块,为什么不简单地重命名谓词呢?例如。 my_vertices/2。另一个可能的选择是让您加载ugraphs模块,而无需使用以下命令导入其谓词:

:- use_module(library(ugraphs), []).

这将解决冲突,但还要求您使用显式限定条件调用ugraphs模块谓词。

在某些情况下,ugraphs模块不是由您显式加载的,而是由于您可能正在加载其他模块的结果。如果是这种情况,请打开详细的自动加载以找出加载模块的原因:

?- set_prolog_flag(verbose_autoload, true).