0
我在編程中遇到了一些困難,我試圖編寫一個謂詞來返回兩個城市之間的所有路徑,儘管此時它返回它在無限循環中找到的第一個路徑。不知道我要出錯的地方,但我一直試圖弄清楚這一點,而且我無處可去。Prolog中的遞歸問題
任何可以提供的幫助將不勝感激。
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。
再次,任何幫助,將不勝感激。
非常感謝提前。
我只是試圖拿出重複,我仍然得到我的第一個答案的無限重複。 –
這是因爲你在主循環中有另一個'repeat'('go'指令)。直接使用'f([],0,lon,spa,OP,OD)'目標,在第一個解決方案後按';',它會顯示第二個。要以編程方式列舉解決方案,您需要使用'findall/3',而不是'repeat'。 –
啊,我明白了,非常感謝你的幫助,你是一個很好的人。 –