私はプロローグでいくつかの問題を抱えています。2つの都市間のすべてのパスを返す述語を書き込もうとしていますが、現時点では無限ループで最初に見つかったパスを返します。どこが間違っているのかわかりませんが、私は一日中これを理解しようとしていて、どこにも行きません。
提供できるどんな助けもいただければ幸いです。
go:-
repeat,
f([],0,lon,spa,OP,OD),
write(OP),
write(OD),
fail.
city(lon).
city(ath).
city(spa).
city(kol).
path(lon,1,ath).
path(ath,3,spa).
path(spa,2,kol).
path(lon,1,kol).
joined(X,Y,D):-
path(X,D,Y);path(Y,D,X).
f(Ci_Vi,Di,De,De,PaO,Di):-
append([De],Ci_Vi,PaO),
!.
f(Cities_Visited,Distance,Start,Destination,Output_Path,Output_Distance):-
repeat,
city(X),
joined(Start,X,D),
not_member(X,Cities_Visited),
New_Distance is Distance + D,
f([Start|Cities_Visited],New_Distance,X,Destination,Output_Path,Output_Distance).
not_member(X,List):-
member(X,List),
!,
fail.
not_member(X,List).
ここで期待している出力は[spa、ath、lon] 4 [spa、kol、lon]3です。
もう一度、助けていただければ幸いです。
よろしくお願いします。