Для задания нам предлагается написать предикат route/3
, который будет успешным, если есть маршрут от Start
до Finish
, посещение города в списке Visits
.Почему мой список не заполняется?
Я придумал идею для решения, но по какой-то причине список Visits
всегда пуст после того, как route
завершается, и я не могу понять, почему это так. Я не ищу решения вопроса, просто что-то, чтобы указать мне в правильном направлении.
Вот мой код до сих пор:
Обратите внимание, что мои призывы к 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 .