Пролог - Подсчитайте количество листьев на дереве - PullRequest
1 голос
/ 03 сентября 2011

Если у меня есть дерево, которое, например, выглядит следующим образом:

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 Ответ

4 голосов
/ 03 сентября 2011

Вы могли бы сделать это так:

count_leaves(l(_), 1).
count_leaves(b(B1, B2), N) :- count_leaves(B1, N1), count_leaves(B2, N2), N is N1 + N2.

По сути, дерево, которое является просто листом, имеет один лист.Если дерево начинается с ветви, вернитесь в обе ветви и добавьте результаты.

Ваше решение дает вам no, потому что ничто не сравнится с empty.И даже если вы исправите это, вы будете считать не листья, а внутренние узлы.

...