【发布时间】:2014-02-23 18:08:01
【问题描述】:
我想创建一个谓词来检查一个节点是否可以在序言中到达图中的另一个节点。例如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]。
标签: prolog graph-theory