プロローグ内に2つのステーション間で可能なすべてのルートを与えるプログラムを作成しました。各ルートでは、各駅は一度しか訪れるべきではありません。私のコードは、これまでのところです:プロローグ内のサイクルルートプログラム
% facts
connection(s1,s2).
connection(s1,s4).
connection(s2,s3).
connection(s2,s5).
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,Y), 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,Y), 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).
問題は、私はルートを求めるときプロローグは私のexampelためのすべてのルートを、与えていないということである[S1、S4、R]は、プロローグは、[私のルートを与えるものではありませんs1、s2、s3、s4]である。私はそれが "+ direction1(X、Y)"と "+ direction2(X、Y)"によって引き起こされたと思います。しかし、私は、プロローグがあるルートで複数回駅に来るのを防ぐためにこれが必要です。任意のアイデアをどのようにこれを修正するには?
それでは、私にすべてのルートを教えてくれません... – zer0kai
すべてのルート、最初の段落で説明した変更、2番目の段落で説明した変更はありません。どのルートがあなたに与えられないのですか? –
例えば、私が "route(s2、s5、R)"を求めるとき、それは "R = [s2、s5]"を与えるだけですが、[s2、s3、s4、s5]のようなルートも存在します。 – zer0kai