对于一个任务,我们被要求写一个route/3
成功的谓词,如果有一条路线 from Start
to Finish
, visit town 在列表中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 ?- 测试。 [] [北帕默斯顿] [旺格努伊,北帕默斯顿] [陶波、旺格努伊、北帕默斯顿] [汉密尔顿、陶波、旺格努伊、北帕默斯顿] [奥克兰、汉密尔顿、陶波、旺格努伊、北帕默斯顿] [] 真的 。