问题描述
我实际上正在从事一个大学项目,并且遇到一些谓词的麻烦。 该项目涉及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 (将#修改为@)