我正在为我的大学写一个练习代码并遇到问题。我对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和这些树中列表中的所有子树等等。
我将非常感谢您的帮助!
答案 0 :(得分:0)
首先,您永远不会将树分配给W,因此该函数将在第一个case
语句中阻止。
然后递归调用{Count0 T}
将函数Count0
的参数绑定到列表而不是树,因为T
是subT
中包含的树列表的其余部分字段。
Count0
函数可以将列表作为参数。因此,要获得value
字段并在子树上递归迭代,此函数应该更复杂一些。您可以使用累加器来计算包含0的字段value
的计数。