0

我为我的大学编写了一个练习代码并且遇到了问题。我是 Oz 的初学者,只是无法弄清楚为什么这段代码没有显示任何内容,但被编译器接受:

declare Tree W P T1 T2 T3 T4
fun {Count0 Tree}
   case Tree.subT of nil then
      if Tree.value==0 then
     1
      else
     0
      end
   [] H|T then
      if Tree.value==0 then 1+{Count0 T}
      else
     0+{Count0 T}
      end
   end
end
in
T1 = tree(value:0 subT:nil)
T2 = tree(value:0 subT:[T4])
T3 = tree(value:0 subT:nil)
T4 = tree(value:0 subT:nil)
T0 = tree(value:W subT:[T1 T2 T3])
{Browse {Count0 Tree}}

代码应该计算一棵树的值“0”的数量,以及他在 tree.subT 和这些树中的列表中的所有子树等等。

我将非常感谢任何帮助!

4

1 回答 1

0

首先,您既不分配 Tree 也不分配 W,因此该函数将在第一条语句中阻塞。case然后递归调用{Count0 T}会将函数的参数绑定Count0到列表而不是树,因为字段T中包含的树列表的其余部分。subT

Count0函数可以将列表作为参数。因此,要获取value字段并在子树上递归迭代,这个函数应该更复杂一些。例如,您可以使用累加器来计算value包含 0 的字段。

于 2015-11-26T22:02:35.740 回答