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" 错误。我知道它通常与代码的顺序有关,所以我试图改变它,但到目前为止没有成功。
一个典型的错误是你在这里将 Cost
和 Tempcost
总结为 Newcost
。但是 Newcost
是从 Through
到 Finish
的成本。
因此,这种关系与您定义它的方式相反。我们可以说从 Start
到 Finish
的 Cost
与从 Start
到 Through
的成本相同(HopCost
), 加上 RestCost
: 从 Through
到 Finish
的成本:
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>).
我有几个链接元素,提供了遍历它们的成本:
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" 错误。我知道它通常与代码的顺序有关,所以我试图改变它,但到目前为止没有成功。
一个典型的错误是你在这里将 Cost
和 Tempcost
总结为 Newcost
。但是 Newcost
是从 Through
到 Finish
的成本。
因此,这种关系与您定义它的方式相反。我们可以说从 Start
到 Finish
的 Cost
与从 Start
到 Through
的成本相同(HopCost
), 加上 RestCost
: 从 Through
到 Finish
的成本:
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>).