Пролог - сбалансированное дерево или нет - PullRequest
2 голосов
/ 05 сентября 2011

Я хочу написать программу, которая сообщает мне, сбалансировано ли дерево или нет. В этом случае сбалансированный означает одинаковую высоту или перепад высот 1.

Это то, что я написал до сих пор, но это не работает для разницы в высоте 1. Почему?

balanced(l(_)).
balanced(b(B1, B2)):-
    height(B1,H),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H + 1),
    height(B2,H),
    balanced(B1),
    balanced(B2).

balanced(b(B1,B2)):-
    height(B1,H),
    height(B2,H + 1),
    balanced(B1),
    balanced(B2).

1 Ответ

1 голос
/ 05 сентября 2011

H + 1 не оценивается как значение H плюс один, если вы не говорите Прологу выполнять арифметическую оценку;вместо этого Prolog создает термин с + в качестве функтора и H и 1 в качестве аргументов.(Попробуйте H + 1 =.. L и проверьте значение L, чтобы убедиться в этом)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...