Создать предикат, который находит среднеарифметическое значение чисел, находящихся в листьях дерева - 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.
Объяснение кода листинга программы
- В коде используется язык программирования Prolog.
- Задача заключается в создании предиката, который находит среднеарифметическое значение чисел, находящихся в листьях дерева.
- Для решения задачи определены следующие домены и предикаты:
- domain: treetype = tree(real, treetype, treetype); empty
- predicates: tree_sum(treetype,real), tree_num(treetype,real), tree_avg(treetype,real)
- В качестве начального утверждения для предиката tree_sum установлено tree_sum(empty,0).
- Для предиката tree_sum определено рекурсивное правило: S=V+SL+SR, где V - значение узла, L и R - значения левого и правого поддеревьев соответственно, SL и SR - суммы значений левого и правого поддеревьев соответственно.
- Для предиката tree_num установлено tree_num(empty,0).
- Для предиката tree_num определено рекурсивное правило: N=1+NL+NR, где N - количество узлов в дереве, L и R - количество узлов в левом и правом поддеревьях соответственно, NL и NR - количество узлов в левом и правом поддеревьях соответственно.
- Для предиката tree_avg установлено tree_sum(T,S),tree_num(T,N), N<>0, A=S/N.
- Для предиката tree_avg определено рекурсивное правило: A=S/N, где S - сумма значений узлов в дереве, N - количество узлов в дереве.
- Код позволяет вычислить среднеарифметическое значение чисел, находящихся в листьях дерева.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д