我有几个链接的元素,它们的遍历费用如下:
link(a, b, 100).
link(b, c, 223).
link(c, d, 311).
我想确定遍历是否可行,然后返回总费用。
以便问题?-count(a, d, X).
返回X = 634
。
这是我的尝试:
sum(A, B, X) :-
X is A + B.
count(Start, Finish, Cost) :-
link(Start, Finish, Cost).
count(Start, Finish, Cost) :-
link(Start, Through, Tempcost),
count(Through, Finish, Newcost),
sum(Cost, Tempcost, Newcost).
问题是,尽管我对如何增加一个固定数字有一个大致的了解,但我很难将完全不同的数字相加并传递给递归。
我当前的代码返回“参数注入。实例化”错误。我知道它通常与代码的顺序有关,因此我尝试对其进行更改,但到目前为止还没有运气。
答案 0 :(得分:0)
一个典型的错误是您在这里将Cost
与Tempcost
求和为Newcost
。但是Newcost
是从Through
到Finish
的成本。
因此,关系与定义关系的方式相反。我们可以说,从Cost
到Start
的{{1}}与将Finish
到Start
的成本(用{{1 }}),再加上Through
:从HopCost
到RestCost
的费用:
Through