Вот код
flight(roc,syr,25).
flight(roc,jfk,55).
flight(jfk,bos,65).
flight(bos,syr,40).
flight(jfk,syr,50).
flight(bos,roc,50).
layover(roc,25).
layover(jfk,55).
layover(syr,30).
layover(bos,40).
route(X,Y,R,D) :-
flight(X,Y,L),
D is L,
R = [X,Y].
route(X,Y,R,D) :-
flight(X,Z,L),
route(Z,Y,P,M),
R = [X|P],
layover(Z,T),
D is M+L+T,
\+ member(X,P).
Вот что происходит. Второй пункт
route(X,Y,R,D) :-
flight(X,Z,L),
route(Z,Y,P,M),
R = [X|P],
layover(Z,T),
D is M+L+T,
\+ member(X,P).
переходит в бесконечный цикл. Он отображает ответы, которые я хочу, затем продолжает находить больше ответов (поскольку вы можете просто продолжать цикл вокруг остановок) и выполняет бесконечный цикл, пока не остановится. Программа должна найти все возможные маршруты полета, которые не зацикливаются на остановках. Я знаю, почему это происходит, но понятия не имею, как изменить мой код, чтобы это исправить. Пожалуйста помоги.
Вот одно решение
?- route(roc, syr, Routing, Duration).
Routing = [roc, syr],
Duration = 25 ;
Routing = [roc, jfk, syr],
Duration = 160 ;
Routing = [roc, jfk, bos, syr],
Duration = 255 ;
false.