Prolog - 按给定数字递增

Prolog - increment by given number

我有几个链接元素,提供了遍历它们的成本:

link(a, b, 100).
link(b, c, 223).
link(c, d, 311).

我想看看是否可以遍历,如果可以,那么return总成本。

所以问题?-count(a, d, X). returns 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).

问题是,虽然我有一个大致的想法如何增加一个固定的数字,但我很难将完全不同的数字相加并将它们传递给递归。

我当前的代码 return 有一个 "Argument Insuff. Instantiated" 错误。我知道它通常与代码的顺序有关,所以我试图改变它,但到目前为止没有成功。

一个典型的错误是你在这里将 CostTempcost 总结为 Newcost。但是 Newcost 是从 ThroughFinish 的成本。

因此,这种关系与您定义它的方式相反。我们可以说从 StartFinishCost 与从 StartThrough 的成本相同(HopCost), 加上 RestCost: 从 ThroughFinish 的成本:

sum(A, B, X) :-
    X is A + B.

count(Start, Finish, Cost) :-
    link(Start, Finish, Cost).
count(Start, Finish, Cost) :-
    link(Start, Through, <b>HopCost</b>),
    count(Through, Finish, <b>RestCost</b>),
    sum(<b>HopCost</b>, <b>RestCost</b>, <b>Cost</b>).