2012-06-05 4 views
1

과제의 경우 Start에서 Finish까지의 경로가 있고 Visits에있는 도시를 방문하면 성공한 술어 route/3을 작성해야합니다.내 목록에 데이터가 채워지지 않는 이유는 무엇입니까?

솔루션에 대한 아이디어가 떠오르지 만이 끝나면 어떤 이유에서든 Visits 목록이 항상 비어 있으며 그 이유를 알 수 없습니다. 나는 그 문제에 대한 해결책을 찾고 있지 않다. 올바른 방향으로 나를 가리키고있다. write에 내 전화 디버깅 이유로 단순히

참고 :

여기에 지금까지 내 코드입니다.

road('Wellington', 'Palmerston North', 143). 
road('Palmerston North', 'Wanganui', 74). 
road('Palmerston North', 'Napier', 178). 
road('Palmerston North', 'Taupo', 259). 
road('Wanganui', 'Taupo', 231). 
road('Wanganui', 'New Plymouth', 163). 
road('Wanganui', 'Napier', 252). 
road('Napier', 'Taupo', 147). 
road('Napier', 'Gisborne', 215). 
road('New Plymouth', 'Hamilton', 242). 
road('New Plymouth', 'Taupo', 289). 
road('Taupo', 'Hamilton', 153). 
road('Taupo', 'Rotorua', 82). 
road('Taupo', 'Gisborne', 334). 
road('Gisborne', 'Rotorua', 291). 
road('Rotorua', 'Hamilton', 109). 
road('Hamilton', 'Auckland', 126). 

route(Start, Start, Visits) :- 
    write(Visits), nl. 

route(Start, Finish, Visits) :- 
    write(Visits),nl, 
    road(Finish, From, _), 
    route(Start, From, [From | Visits]). 

test :- 
    Visits = [], 
    route('Auckland', 'Wellington', Visits), 
    write(Visits). 

출력 test. 러닝 프롤로그

1 ?- test. 
[] 
[Palmerston North] 
[Wanganui,Palmerston North] 
[Taupo,Wanganui,Palmerston North] 
[Hamilton,Taupo,Wanganui,Palmerston North] 
[Auckland,Hamilton,Taupo,Wanganui,Palmerston North] 
[] 
true .

답변

2

변수 할당 통합하지 이다. 물론이 주장은 당신 코스의 일부입니다.

Visits에서 test은 시작할 때 '할당 한'빈 목록 (누적 기)을 유지합니다. 빌드 목록을 보유하는 인수를 route에 추가 (또는 더 잘 삽입)해야합니다. 예 :

test :- 
    route('Auckland', 'Wellington', [], Visits), 
    write(Visits). 
관련 문제