Реализация предиката prolog правильно обрабатывает циклы, избегая бесконечных циклов - PullRequest
0 голосов
/ 11 января 2020

Один запрос для завершения моей программы должен проверить, существует ли прямой маршрут между двумя указанными городами. Кроме того, он может перечислить все подключенные города для данного города. См. Следующее:

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 = .......

Но у меня бесконечная ie рекурсия, и она не может стоп. Что я могу решить эту проблему?

...