如果我有一棵树,例如:
tree3(b(l(1),b(l(2),l(3)))).
我如何编写一个计算叶数的程序? 我希望它在使用时看起来像这样:
?- tree3(T), count_leaves(T, N).
N = 3,
T = b(l(1),b(l(2),l(3)))
我喜欢任何帮助!
答案 0 :(得分:4)
你可以这样做:
count_leaves(l(_), 1).
count_leaves(b(B1, B2), N) :- count_leaves(B1, N1), count_leaves(B2, N2), N is N1 + N2.
基本上,只是一片叶子的树有一片叶子。如果树以分支开头,则递归到两个分支并添加结果。
您的解决方案为您提供了no
,因为没有任何内容可以与empty
匹配。即使你修复了它,你也不会计算叶子,而是内部节点。