アークのリストが表示されます。
arc(a,b).
arc(b,c).
arc(c,d).
arc(d,b).
arc(d,e).
arc(e,e).
arc(e,f).
X
ノードからノードへのパスがあるかどうかを教えてくれる一連の句を書きましたY
。ループが発生する可能性があり、私はそれを説明しました。
path(X,Y) :-
arc(X,Y).
path(X,Y) :-
arc(X,Z),
path(Z,Y,[X]).
path(X,Y,P) :-
arc(X,Y).
path(X,Y,P) :-
\+ member(X,P),
arc(X,Z),
append([X],P,L),
path(Z,Y,L).
成功すると、トラバースされたノードのリストを返すようにこれを変更する必要があります。これをどのように行うかはわかりません。
私のベースケースは次のようなものになると思いますpath2(X,Y,[X,Y]) :- arc(X,Y).
が、それは私のプログラムでは機能しません。前の部分のソリューションに何か問題がありますか、それとも小さな変更がありませんか?どんな助けでもいただければ幸いです。ありがとう!