我想做一个谓词来检查一个节点是否可以在prolog中的图中到达另一个节点。例如Connected(1,X,[[1,3],[3,4],[2,5]])
第一个参数是我想要启动的节点,第二个是我想要达到的节点,第三个是边缘列表。到目前为止,我已经设法做到了这一点,但当我试图通过使用findall/3获得所有的节点时,我得到了一个无限循环。Prolog连接图的边缘
有什么方法可以阻止无限循环或者我应该从开始的问题出发?
这是到目前为止我的代码:
match([X,Y],List):- member([X,Y], List).
match([X,Y],List):- member([Y,X], List).
go(X,Y,List):-match([X,Y],List).
go(X,Y,List):-match([X,Z],List),go(Z,Y,List).
goes(X,List,List2):-findall(Y,go(X,Y,List),List2).
我在序言新的,我想不出什么我做错了。
一个边沿共同表示是'XY'不'[X,Y]' 。 – false