Recursion prolog谓词实现正确地处理循环,避免无限循环

Recursion prolog谓词实现正确地处理循环,避免无限循环,recursion,prolog,graph-theory,Recursion,Prolog,Graph Theory,完成我的程序的单个查询应该检查两个给定的路径之间是否存在直接路由 城市。或者,它可以列出给定城市的所有连接城市。见下文: flight(city1,city2). flight(city2,city1). flight(city2,city3). flight(city3,city2). 我的谓词: route(X,Y):- flight(X,Y). route(X,Y) :- flight(X,Z), route(Z,Y). 我的结果是: ?- route

完成我的程序的单个查询应该检查两个给定的路径之间是否存在直接路由 城市。或者,它可以列出给定城市的所有连接城市。见下文:

flight(city1,city2).
flight(city2,city1).
flight(city2,city3).
flight(city3,city2).
我的谓词:

route(X,Y):-
    flight(X,Y).
route(X,Y) :- 
    flight(X,Z),    
    route(Z,Y).
我的结果是:

?- route(city1,X).
X = city2 ;
X = city1 ;
X = city3 ;
X = city2 ;
X = city1 ;
X = city3 ;
X = city2 ;
X = city1 ;
X = .......

但我有无穷递归,它不能停止。我能解决这个问题吗?

您声明对于所有X,Y,在X和Y之间有一条路由:
route(X,Y)
。很奇怪<代码>路线(ms_Harrison_kitchen,arthurs_library)。产生
true
例如。请重新考虑。使用。我编辑了我的代码@DavidTonhofer,上图..@MesutBUNALDI谢谢,我已经更新了“原样”打印输出。@false我将你的closure0包含在我的项目中,它工作了。谢谢:)