predicates
pathdistance(symbol,symbol,integer).
solve(symbol,symbol,integer).
clauses
pathdistance(a,b,10).
pathdistance(b,c,20).
pathdistance(c,d,5).
pathdistance(d,e,15).
pathdistance(a,d,5).
pathdistance(c,e,10).
solve(X,Z,C):-
pathdistance(X,Z,C).
solve(X,Z,C):-
pathdistance(X,Y,Cost),
solve(Y,Z,C),
Cost is Cost+C.
goal
solve(a,d,Cost).
我想要的费用答案是a和d之间所有C(总距离)的总和。上面的代码不起作用,它不允许我采取新的变量,可以请有人在上面的代码中进行了更改,以便我可以在Cost中获得总距离。请记住,我是prolog的新手,谢谢!
答案 0 :(得分:1)
您需要使用累加器(求解谓词中的另一个变量):
pathdistance(a,b,10).
pathdistance(b,c,20).
pathdistance(c,d,5).
pathdistance(d,e,15).
pathdistance(a,d,5).
pathdistance(c,e,10).
solve(Start, End, Result):-
solve(Start, End, 0, Result).
在这里,您将介绍累加器并将其初始化为0。
solve(Start, End, TotalCost, Result) :-
pathdistance(Start, End, Cost),
Result is TotalCost + Cost.
如果此步骤是最后一步,则结果是累加器的值(此处名为TotalCost)+最后一步。
solve(Start, End, TotalCost, Result):-
pathdistance(Start, Waypoint, Cost),
NewTotalCost is TotalCost + Cost,
solve(Waypoint, End, NewTotalCost, Result).
如果这不是最后一步,您只需按成本增加累加器值。
希望这有帮助。
你应该已经标记了这个作业,因为由于当天早些时候的问题,这个问题已经收到很多事。虽然这次你清楚地表明你尝试过这样的东西。请询问您是否需要其他信息。