1

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

1 回答 1

2

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

然后Visitstest开始时保留您“分配”的空列表(累加器)。您应该向 中添加(或更好地插入)一个route包含构建列表的参数。就像是

test :-
    route('Auckland', 'Wellington', [], Visits),
    write(Visits).
于 2012-06-05T05:41:20.153 回答