我有一些序言谓词来计算给定城市的成本。该过程以如下命令开始: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)
即成本计算列表的长度等于停止。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]).