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