特定の都市のコストを計算するプロローグ述語がいくつかあります。プロセスは次のようなコマンドで始まります。best_route([std, lhr, bud, dse], 2013-5-5, X).
best_route(Cities, StartDate, Cost):-
begin_routing(Cities, StartDate, Cost, []).
begin_routing(Cities, StartDate, Cost, CostList):-
route(Cities, StartDate, CostList),
min_list(CostList, Cost).
route(Cities, StartDate, Costing):-
% stop if all cities have been covered once.
length(Cities, Stop),
length(Costing, Stop);
[Origin, Dest|_] = Cities,
flights(Origin, Dest, StartDate, Costing, Cities, [Cities, Origin, StartDate]).
SWI-Prolog のトレース機能を使用して、ルート述語 -length(Costing, Stop)
が満たされると、つまり Costing List の長さが Stop に等しいことがわかりました。そこで停止する代わりに Prolog を実行して に進み、min_list(CostList, Cost)
CostLost がすべての値を再び失うまで後戻りします。min_list
それが終わったら、リストが のときにに行き[]
ます。
なぜこれが起こっているのかわかりません。どんな助けでも大歓迎です。
編集:
flights(..):-
% Code omitted.
get_next_date(OriginalDate, NextDate),
route(Cities, NextDate, [DayCost|Costing]).
% where DayCost is a simple integer calculated before this is added to the current Costing list
最後に向かって、最後の正しい呼び出しはroute([std, lhr, bud, dse], 2013-5-6, [329, 499, 323, 311]).