Функция для нахождения среднего арифметического листьевых вершин дерева - 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
вычисляет среднее арифметическое значений всех вершин дерева, она может быть использована для вычисления среднего значения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д