Вы могли бы сделать это так:
count_leaves(l(_), 1).
count_leaves(b(B1, B2), N) :- count_leaves(B1, N1), count_leaves(B2, N2), N is N1 + N2.
По сути, дерево, которое является просто листом, имеет один лист.Если дерево начинается с ветви, вернитесь в обе ветви и добавьте результаты.
Ваше решение дает вам no
, потому что ничто не сравнится с empty
.И даже если вы исправите это, вы будете считать не листья, а внутренние узлы.