Aşağıdaki iki kenarı tanımladım:
edge(a,b).
edge(b,c).
add(X, L, [X | L]).
Şimdi bunu kullanarak yinelemeli olarak a'dan c'ye (a,b,c) giden yolu oluşturmaya çalışıyorum:
path(FROM,TO,W):-
edge(FROM,TO),
add(TO, [], X),
add(FROM, X, W).
path(FROM,TO,W):-
edge(FROM,Y),
path(Y,TO, W),
add(FROM, W, _).
Temel durumda iyi çalışıyor gibi görünüyor path(a,b,X)
çıkış olacak X = [a,b]
.
Ancak, path(a,c,X)
sadece çıkışlar X = [b,c]
sanki sadece temel vakaya ulaşıyor ve özyinelemeli çağrıyı yedeklemek yerine orada bitiyor gibi.
Sonuçta, çıktısını almak istiyorum X = [a,b,c]
ama fikirlerim tükendi.
Bilgin olsun, SWİ-Prolog kullanıyorum.