Создать предикат, который находит среднеарифметическое значение чисел, находящихся в листьях дерева - Prolog

Узнай цену своей работы

Формулировка задачи:

Задание: Создать предикат, который находит среднеарифметическое значение чисел, находящихся в листьях дерева. Не представляю как написать такое, со списками я разобрался еще, а вот с деревьями вообще не понятно.

Решение задачи: «Создать предикат, который находит среднеарифметическое значение чисел, находящихся в листьях дерева»

textual
Листинг программы
domains
treetype = tree(real, treetype, treetype); empty
 
predicates
tree_sum(treetype,real)
tree_num(treetype,real)
tree_avg(treetype,real)
 
clauses
tree_sum(empty,0).
tree_sum(tree(V,L,R),S) :- tree_sum(L,SL), tree_sum(R,SR), S=V+SL+SR.
 
tree_num(empty,0).
tree_num(tree(_,L,R),N) :- tree_num(L,NL), tree_num(R,NR), N=1+NL+NR.
 
tree_avg(T,A) :- tree_sum(T,S),tree_num(T,N), N<>0, A=S/N.

Объяснение кода листинга программы

  1. В коде используется язык программирования Prolog.
  2. Задача заключается в создании предиката, который находит среднеарифметическое значение чисел, находящихся в листьях дерева.
  3. Для решения задачи определены следующие домены и предикаты:
    • domain: treetype = tree(real, treetype, treetype); empty
    • predicates: tree_sum(treetype,real), tree_num(treetype,real), tree_avg(treetype,real)
  4. В качестве начального утверждения для предиката tree_sum установлено tree_sum(empty,0).
  5. Для предиката tree_sum определено рекурсивное правило: S=V+SL+SR, где V - значение узла, L и R - значения левого и правого поддеревьев соответственно, SL и SR - суммы значений левого и правого поддеревьев соответственно.
  6. Для предиката tree_num установлено tree_num(empty,0).
  7. Для предиката tree_num определено рекурсивное правило: N=1+NL+NR, где N - количество узлов в дереве, L и R - количество узлов в левом и правом поддеревьях соответственно, NL и NR - количество узлов в левом и правом поддеревьях соответственно.
  8. Для предиката tree_avg установлено tree_sum(T,S),tree_num(T,N), N<>0, A=S/N.
  9. Для предиката tree_avg определено рекурсивное правило: A=S/N, где S - сумма значений узлов в дереве, N - количество узлов в дереве.
  10. Код позволяет вычислить среднеарифметическое значение чисел, находящихся в листьях дерева.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы