【问题标题】:Prolog - increment by given numberProlog - 按给定数字递增
【发布时间】:2019-10-12 10:43:57
【问题描述】:

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

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

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

我当前的代码返回“参数不足。实例化”错误。我知道这通常与代码的顺序有关,所以我尝试更改它,但到目前为止没有运气。

【问题讨论】:

    标签: recursion prolog calculation


    【解决方案1】:

    一个典型的错误是您在这里将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, HopCost),
        count(Through, Finish, RestCost),
        sum(HopCost, RestCost, Cost).

    【讨论】:

      猜你喜欢
      • 2012-01-03
      • 1970-01-01
      • 2016-09-05
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      相关资源
      最近更新 更多