Функция для нахождения среднего арифметического листьевых вершин дерева - Lisp
Формулировка задачи:
Дано S-выражение, представляющее дерево вида «(РебенокЛевый Родитель РебенокПравый)» с числами в качестве вершин. Определить функцию для нахождения среднего арифметического листьевых вершин этого дерева.
Например: если дано "(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))", ответом будет "3".
Решение задачи: «Функция для нахождения среднего арифметического листьевых вершин дерева»
textual
Листинг программы
(defun sum-tree (tree) (cond ((null tree) 0) ((and (null (car tree)) (null (caddr tree))) (cadr tree)) (t (+ (sum-tree (car tree)) (sum-tree (caddr tree)))))) ==> sum-tree (sum-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))) ==> 18 (defun num-tree (tree) (cond ((null tree) 0) ((and (null (car tree)) (null (caddr tree))) 1) (t (+ (num-tree (car tree)) (num-tree (caddr tree)))))) ==> num-tree (num-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))) ==> 3 (avg-tree '(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))) ==> 6
Объяснение кода листинга программы
Функция sum-tree
принимает в качестве аргумента дерево, и возвращает сумму значений всех вершин дерева.
Функция num-tree
принимает в качестве аргумента дерево, и возвращает количество вершин дерева.
Функция avg-tree
принимает в качестве аргумента дерево, и возвращает среднее арифметическое значений всех вершин дерева.
В данном примере:
sum-tree
вызывает функциюsum-tree
с аргументом(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))
num-tree
вызывает функциюnum-tree
с аргументом(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))
avg-tree
вызывает функциюavg-tree
с аргументом(((nil 1 nil) 5 (nil 7 nil)) 3 (nil 4 (nil 10 nil)))
Поскольку функцияsum-tree
рекурсивно обходит все вершины дерева, она может быть использована для вычисления суммы значений всех вершин. Поскольку функцияnum-tree
рекурсивно обходит все вершины дерева, она может быть использована для подсчета количества вершин дерева. Поскольку функцияavg-tree
вычисляет среднее арифметическое значений всех вершин дерева, она может быть использована для вычисления среднего значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д