Необходимо разработать функцию, вычисляющую среднее арифметическое массива (без применения рекурсии) - Lisp
Формулировка задачи:
Не получается написать программку."Символ используется для хранения индексированных данных (аналогично массиву). Свойство Length содержит размерность "массива", а в свойствах с именами "0","1",..., "Lеngth-1 хранятся числовые значения. Необходимо разработать функцию, вычисляющую среднее арифметическое массива.
Решение задачи: «Необходимо разработать функцию, вычисляющую среднее арифметическое массива (без применения рекурсии)»
textual
Листинг программы
(setq *s* nil) ==> NIL ;; Создана глобальная переменная *s* (spropl '*s* '(0 2 1 5 2 5 3 7 4 -4 5 10)) ==> (0 2 1 5 2 5 3 7 4 -4 5 10) (defun avg-list (s) (let ((sum 0) (a nil) (p 0)) (loop (setq a (getprop s p)) (when (null a) (return t)) (setq sum (+ sum a) p (+ p 1))) (if (zerop p) nil (/ sum p)))) ==> avg-list (avg-list '*s*) ==> 13/6
Объяснение кода листинга программы
- Создана глобальная переменная s.
- Переменная s инициализируется списком (0 2 1 5 2 5 3 7 4 -4 5 10).
- Функция avg-list определена с помощью defun.
- Функция avg-list принимает один аргумент s.
- Внутри функции созданы три переменные: sum, a, p.
- Переменная sum инициализируется нулем.
- Переменная a инициализируется значением nil.
- Переменная p инициализируется нулем.
- Запускается цикл loop.
- В каждой итерации цикла значение переменной a устанавливается равным значению свойства s с индексом p.
- Если значение a равно nil, то цикл прерывается и функция возвращает t.
- К переменной sum прибавляется значение a.
- Значение переменной p увеличивается на единицу.
- Если значение переменной p равно нулю, то функция возвращает nil.
- Если значение переменной p не равно нулю, то функция возвращает результат деления суммы на значение переменной p.
- Вызвана функция avg-list с аргументом 's'.
- Возвращенное значение функции равно 13/6.
- Выведено значение 13/6.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д