为什么我的列表没有填充?

时间:2012-06-05 03:46:18

标签: prolog

对于作业,我们被要求编写一个谓词route/3,如果有StartFinish的路线,则会在列表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 .

1 个答案:

答案 0 :(得分:2)

Prolog中的变量是统一,而不是已分配。当然,这个论点是你课程的一部分。

然后Visits中的test会在启动时保留您指定的空列表(累加器)。您应该向route添加(或更好地插入)包含构建列表的参数。像

这样的东西
test :-
    route('Auckland', 'Wellington', [], Visits),
    write(Visits).