1

割り当ての場合、リスト内の町を訪問してからへroute/3のルートがある場合に成功する述語を作成するように求められます。StartFinishVisits

私は解決策のアイデアを思いつきましたが、何らかの理由で、終了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?-テスト。
[]
[パーマストンノース]
[ファンガヌイ、パーマストンノース]
[タウポ、ファンガヌイ、パーマストンノース]
[ハミルトン、タウポ、ファンガヌイ、パーマストンノース]
[オークランド、ハミルトン、タウポ、ファンガヌイ、パーマストンノース]
[]
true。
4

1 に答える 1

2

Prologの変数は統一されており、割り当てられていません。確かに、この議論はあなたのコースの一部です。

次にVisitstest開始時に「割り当てた」空のリスト(アキュムレータ)を保持します。routeビルドされたリストを保持する引数をに追加(またはより適切に挿入)する必要があります。何かのようなもの

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