2012-06-05 7 views
1

Для задания нам предлагается написать предикат 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 .

ответ

2

Переменные в Прологе являются унифицированный, не назначен. Разумеется, этот аргумент является частью вашего курса.

Затем Visits в test сохраняет пустой список (аккумулятор), который вы назначили 'при запуске. Вы должны добавить (или лучше вставить) аргумент в route, который содержит встроенный список. Что-то вроде

test :- 
    route('Auckland', 'Wellington', [], Visits), 
    write(Visits). 
Смежные вопросы