Prolog - 计算树中叶子的数量

时间:2011-09-03 16:11:24

标签: tree count prolog

如果我有一棵树,例如:

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)))

我喜欢任何帮助!

1 个答案:

答案 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匹配。即使你修复了它,你也不会计算叶子,而是内部节点。