【发布时间】: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