【问题标题】:Finding the weighted sum of a tree求一棵树的加权和
【发布时间】:2019-11-04 12:54:35
【问题描述】:

我正在开发一个小型 prolog 程序来处理二叉树,并试图找到树的加权和。每个节点都有一个值,然后将其乘以节点的深度。我试图在这里使用累加器,但我不断收到参数没有充分实例化的错误。

我已经开始使用这里找到的实现:http://people.sju.edu/~jhodgson/ai/accums.html

而且这似乎是一个相当标准的事情。

我试图省略我的谓词的各个部分,只是为了看看问题出在哪里,以及当我在总和计算中包含 S1 和 S2 时问题出现了。

tree_wsum(Tree, S) :- tree_wsum(Tree, S, 0).

tree_wsum(nil, Sum, Depth).
tree_wsum(tree(Root, Left, Right), Sum, Depth) :- D1 is Depth + 1, tree_wsum(Left, S1, D1), tree_wsum(Right, S2, D1), Sum is (Depth * Root) + S1 + S2.

D1 和 Depth * Root 计算没问题,但是添加 S1 和/或 S2 会引发以下错误:

错误:参数没有充分实例化 错误:在: 错误:[12] _6020 是 2*1+_6028 错误:[11] tree_wsum(tree(1,nil,nil),_6060,2) at :28

【问题讨论】:

  • tree_wsum(nil, Sum, Depth). 这是你的基本情况,因此 Sum 应该有一个值?

标签: prolog


【解决方案1】:
tree_wsum(Tree, Sum) :- 
    tree_wsum(Tree, Sum, 0).
tree_wsum(nil,0,_).
tree_wsum(tree(X,Left,Right), Sum, Depth) :-
    D1 is Depth+1,
    tree_wsum(Left, S1,D1), 
    tree_wsum(Right, S2,D1),
    Sum is (X*D1)+S1+S2.

【讨论】:

  • 请解释一下,可能不是每个人都清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-20
  • 1970-01-01
相关资源
最近更新 更多