对于作业,我们被要求编写一个谓词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 .
答案 0 :(得分:2)
Prolog中的变量是统一,而不是已分配。当然,这个论点是你课程的一部分。
然后Visits
中的test
会在启动时保留您指定的空列表(累加器)。您应该向route
添加(或更好地插入)包含构建列表的参数。像
test :-
route('Auckland', 'Wellington', [], Visits),
write(Visits).