我希望能够在prolog中创建一个谓词,用于检查一个节点是否能够到达图中的另一个节点。例如:
有没有办法停止无限循环,或者我应该从头开始思考这个问题?
下面是我的代码:
Connected(1,X,[[1,3],[3,4],[2,5]])
。第一个参数是我想要开始的节点,第二个参数是我想要到达的节点,第三个参数是边的列表。到目前为止,我已经能够实现这个谓词,但是当我尝试使用findall/3获取到达的所有节点时,代码会进入无限循环。有没有办法停止无限循环,或者我应该从头开始思考这个问题?
下面是我的代码:
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).
我是Prolog的新手,但我无法弄清楚我错在了哪里。
X-Y
而不是[X,Y]
。 - false