Ответ в теме: Определить высоту (глубину) дерева на Prolog

      Комментарии к записи Ответ в теме: Определить высоту (глубину) дерева на Prolog отключены
#2260

На каждом шаге функция должна вычислять высоты левого и правого поддерева, выбирать из них максимальную, в качестве результата выдавать на единицу увеличенное значение. Решение для пустого дерева очевидно и используется для окончания рекурсии.

В таком алгоритме нам потребуется правило получения наибольшего из двух чисел (max):

max(A, B, A):- A > B, !.
max(_A, B, B).

domains
  treetype = tree(integer, treetype, treetype); empty
predicates
  tree_height(treetype, integer)
clauses
  tree_height(empty, 0):-!.
  tree_height(tree(_Value, LeftSubtree, RightSubtree), Height):-
    tree_height(LeftSubtree, LeftSubtreeHeight),
    tree_height(RightSubtree, RightSubtreeheight), 
    max(LeftSubtreeHeight, RightSubtreeheight, MaxSubtreeHeight),
    Height = MaxSubtreeHeight + 1.