私はプロローグでプログラムを作成しました。これは、サイクル内の2つのステーション間のルートを私に与えるはずです。例えば私がs3とs4の間のルートを尋ねると、2つの正しいルート[s3、s4]と[s3、s2、s1、s6、s5、s4]が与えられますが、欲しい。それは[s3、s4、s5、s6、s1、s2、s3、s4]です。 1つのルートで1つの駅を何度も訪問することはできません。私はメンバーコマンドでこれを防止しようとしましたが、それは常に動作しないようです。これをどうすれば解決できますか?ここでプロローグ内の有向グラフのサイクル
は、コードは次のとおりです。事前に
% facts
connection(s1,s2).
connection(s2,s3).
connection(s3,s4).
connection(s4,s5).
connection(s5,s6).
connection(s6,s1).
% predicates
direction1(X,Y) :- connection(X,Y).
direction2(X,Y) :- connection(Y,X).
route1(X,Y,R):- route1(X,Y,[],R).
route1(X,Y,_,[X,Y]) :- direction1(X,Y).
route1(X,Y,L,R) :- direction1(X,Z), \+member(Z,L), route1(Z,Y,[Z|L],RZ), R=[X|RZ].
route2(X,Y,R):- route2(X,Y,[],R).
route2(X,Y,_,[X,Y]) :- direction2(X,Y).
route2(X,Y,L,R) :- direction2(X,Z), \+member(Z,L), route2(Z,Y,[Z|L],RZ), R=[X|RZ].
route(X,Y,R) :- route1(X,Y,R); route2(X,Y,R).
ありがとう!