Prolog で次の問題が発生しています。たとえば、ナレッジ ベースにいくつかの事実があります。
flight(rome,london,ba,1500,150,400).
flight(london,newyork,airfrance,600,60,200).
flight(rome,paris,airfrance,1200,120,500).
flight(paris,newyork,airfrance,600,60,200).
flight(newyork,london,ba,1500,240,300).
X から Y までのすべての可能なルートのリストを取得することにのみ関心があります。再帰ルールを使用する必要があり、訪問した場所をリストに追加して、飛行経路として繰り返し実行されるサイクルを停止する必要があることを理解しています。知識ベースにはいくつかのサイクルがあります。
私がこれまでに持っているものは次のとおりです。
flight_route(X,Y):-
flight(X,Y,A,B,C,D).
trip(X,X,[]).
trip(X,Z,T) :-
flight_route(Y,Z),
not(member(Y,T)),
trip(X,Y,[Y|T]).
何らかの理由で、トレースを見ると、not(member(Y,T)) をチェックしようとするとルールが失敗しますが、なぜそうなるのか理解できません。