Мне нужно сосчитать все внутренние узлы двоичного дерева с помощью пролога. Я могу сосчитать все узлы, используя следующий код
internal(tree(_,L,R), I) :- internal(L, I2), internal(R, I3), I is I2 + I3 + 1.
internal(nil, 0).
И я подумал, что изменив базовый вариант на
internal(tree(_,nil, nil), 0).
Я мог бы заставить его работать, но он возвращает false.
вот тестовый пример, который должен вернуть 4 внутренних (дерево (8, дерево (5, дерево (2, ноль, ноль)), дерево (7, ноль, ноль)), дерево (9, ноль, дерево (15, дерево (11, ноль, ноль), ноль))), я).
Может кто-нибудь сказать мне, где мойошибка есть?Спасибо
После прочтения ваших предложений я получил это, но все равно не получается.
internal(tree(_,L,R), I) :- internal(L, I2), internal(R, I3), I is I2 + I3.
internal(tree(_,nil, R), I):- !, internal(R, I3), I is I3 + 1.
internal(tree(_,L, nil), I):- !, internal(L, I3), I is I3 + 1.
internal(tree(_,nil, nil), 0).
internal(nil, 0).