프롤로그에 어려움이 있습니다. 무한 루프에서 찾은 첫 번째 경로를 반환하는 순간에도 두 도시 간의 모든 경로를 반환하는 조건부를 작성하려고합니다. 내가 어디로 잘못 가고 있는지 확실하지 않지만 하루 종일 알아 내려고 노력 중이며 어디에도 없습니다.프롤로그의 재귀 문제
제공되는 도움을 주시면 감사하겠습니다.
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).
내가 기대하는 출력은 [온천, ath, lon] 4 [온천, 콜, 론] 3입니다.
다시 한번 도움을 주시면 감사하겠습니다.
미리 감사드립니다.
나는 반복을 꺼내려고했지만 나는 여전히 내 첫 번째 대답을 무한 반복했다. –
메인 루프 ('go' 지시어)에 또 다른'repeat'가 있기 때문입니다. 'f ([], 0, lon, spa, OP, OD)'목표를 직접 사용하고 첫 번째 해결책 뒤에';'를 누르면 두 번째 것을 보여줍니다. 프로그래밍 방식으로 솔루션을 열거하려면'repeat'가 아니라'findall/3'을 사용해야합니다. –
아, 알겠습니다. 도움을 주셔서 대단히 감사합니다. 당신은 좋은 사람입니다. –