これがコードです
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).
無限ループに入ります。それは私が望む答えを表示し、さらに多くの答えを見つけ続け(基本的に停止をループし続けることができるため)、停止するまで無限ループを実行します。プログラムは、ストップをループしない可能なすべての飛行ルートを見つけることになっています。これが発生する理由はわかっていますが、コードを変更して修正する方法がわかりません。助けてください。
ここに1つの解決策があります
?- route(roc, syr, Routing, Duration).
Routing = [roc, syr],
Duration = 25 ;
Routing = [roc, jfk, syr],
Duration = 160 ;
Routing = [roc, jfk, bos, syr],
Duration = 255 ;
false.