Tがインスタンス化されていないときにnot(member(Y, T))
が失敗することは簡単に分かります。たとえば、試してみてください:
?- not(member(X,L)).
false.
あなたが失敗したことがわかります。あなたは@Fatalizeは、書面によっても示唆された出力を持つことができ
?- show_path(a,e,L).
L = [a, b, e] ;
L = [a, b, e, a, c, e] ;
L = [a, b, e, a, c, f, g, e] ;
L = [a, b, e, a, d, f, g, e] ;
L = [a, c, e] ;
L = [a, c, e, a, b, e] ;
L = [a, c, e, a, d, f, g, e] ;
L = [a, c, f, g, e] ;
L = [a, c, f, g, e, a, b, e] ;
L = [a, d, f, g, e] ;
L = [a, d, f, g, e, a, b, e] ;
L = [a, d, f, g, e, a, c, e] ;
false.
:
show_path(X,Y,R):-show_path(X,Y,[],R).
show_path(X,Y,_,[X,Y]) :- edge(X,Y).
show_path(X,Y,L,[X|R]) :- edge(X,Z),\+member(Z,L),
show_path(Z,Y,[Z|L],R).
例:あなたは空のリストで始まるすべてのステップでインスタンス化される余分なリストを維持する必要があることを解決するために、 :
show_path(X,Y,[X,Y]) :- edge(X,Y).
show_path(X,Y,R) :- edge(X,Z), show_path(Z,Y,RZ),R=[X|RZ],
sort(R,R1),length(R,N),length(R1,N1),
(N>N1->!,fail ;true).
例:
?- show_path(a,e,L).
L = [a, b, e] ;
L = [a, c, e] ;
L = [a, c, f, g, e] ;
L = [a, d, f, g, e] ;
false.
入力が与えられた場合の期待される出力の例はありますか? – Fatalize
も参照してください[ここ](http://stackoverflow.com/questions/30328433/definition-of-a-path-trail-walk) –