Prolog-按给定数字递增

时间:2019-10-12 10:43:57

标签: recursion prolog calculation

我有几个链接的元素,它们的遍历费用如下:

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

问题是,尽管我对如何增加一个固定数字有一个大致的了解,但我很难将完全不同的数字相加并传递给递归。

我当前的代码返回“参数注入。实例化”错误。我知道它通常与代码的顺序有关,因此我尝试对其进行更改,但到目前为止还没有运气。

1 个答案:

答案 0 :(得分:0)

一个典型的错误是您在这里将CostTempcost求和为Newcost。但是Newcost是从ThroughFinish的成本。

因此,关系与定义关系的方式相反。我们可以说,从CostStart的{​​{1}}与将FinishStart的成本(用{{1 }}),再加上Through:从HopCostRestCost的费用:

Through