0
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(总距离)的总和。上面的代码不起作用,它不允许我采用新变量,请有人在上面进行更改代码,这样我就可以得到成本的总距离。请记住,我是 prolog 的新手,谢谢!

4

1 回答 1

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).

如果这不是最后一步,您只需按成本增加累加器值。

希望这可以帮助。

不过,您应该已经标记了这个作业,因为由于当天早些时候的问题很糟糕,这个问题已经收到了很多反对票。虽然这一次你清楚地表明你尝试过,所以这是另一回事。请询问您是否需要其他信息。

于 2011-11-27T10:05:58.773 回答