序言:无权重新定义imported_procedure错误

问题描述

我实际上正在从事一个大学项目,并且遇到一些谓词的麻烦。 该项目涉及Dijkstra算法的重现性,并由我的教授给我写了一些谓词。

正如标题所述,我不断收到错误消息

无权重新定义imported_procedure

与谓词 vertices / 2 neighbors / 3 组成库ugraphs和带有heaps中的谓词 heap_size / 2

这是我组成它们的方式:

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

neighbors(G,V,Ns) :-
   findall(arc(G,N,W),arc(G,Ns1),findall(arc(G,Ns2),append(Ns1,Ns2,Ns).

heap_dim(H,S) :-
   heap(H,S).

我已经尝试将它们全部设置为 :-dynamic ,但没有任何变化(嗯,有些变化了:我什至得到了错误 dynamic / 1:无权重新定义imported_procedure )。

那是什么问题?为什么即使我不希望监听器继续调用这些库,它们仍会继续调用它们呢?我该怎么解决

我已经考虑过更改他们的名字,但是我不能仅仅因为我的教授希望我这样创建他们。

如果您想尝试一下,这里是项目的链接https://drive.google.com/file/d/1zRmoBDdWJkjlWzQbFs_g6sQBhRF0joaM/view?usp=sharing

如果您运行?- shortest_path(G,A,B,Path).,则侦听器会说出图G中从点A到点B的最短路径是什么(如果要尝试运行test_2(G).,请先运行{{1 }}。

所有Dijkstra的算法都是通过使用堆结构组成的

谢谢大家!

编辑:当我尝试编译程序时,有screen关于Prolog的监听器

我正在运行的确切源文件是上面链接文件:在emacs上,我打开的文件实际上位于您在图像中看到的路径上

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)