Не могу понять ошибку - Lisp
Формулировка задачи:
(defun SRA (st) ;sr. arifm. (setq sr 0) (setq out 0) (setq i 0) (dolist (el st out) (setq i (+ i 1)) (setq out (+ out el)) ) (setq sr (/ out i)) ) (defun ZZ(x) ; (setq x (* x -1)) ) #|smena znaka +/- esli abs el-ta > sr. arifm.|# (defun usl2(sp) (setq dopst()) (dolist (el sp dopst) (cond ((> (abs el) (SRA(sp))) ;true (cons (ZZ(el)) dopst) ) (t ;else (cons el dopst) ) ) ) (setq sp dopsp) ) (usl2 '(2 4 6 8)); ne pashet =\
Решение задачи: «Не могу понять ошибку»
textual
Листинг программы
(defun abs-average (w &aux (m (float (/ (reduce #'+ w) (length w))))) (loop for a in w collect (if (> (abs a) m) (* a -1) a))) > (abs-average '(1 2 3 4)) (1 2 -3 -4)
Объяснение кода листинга программы
В этом коде функция abs-average
вычисляет среднее арифметическое элементов вектора w
, которые больше среднего значения m
.
Список выражений в коде:
(defun abs-average (w &aux (m (float (/ (reduce #'+ w) (length w)))))
- Создает функцию
abs-average
, которая принимает аргументw
и вспомогательную переменнуюm
. m
инициализируется как среднее значение элементов вектораw
, используя функциюreduce
для суммирования всех элементов вектораw
и деления на длину вектора.
- Создает функцию
- `(loop for a in w collect (if (> (abs a) m) (* a -1) a))]
- Начинает цикл
loop
для каждого элементаa
в вектореw
. - Если
abs(a)
большеm
, то элемент умножается на -1. - Все элементы, удовлетворяющие условию, собираются в новый вектор.
- Начинает цикл
> (abs-average '(1 2 3 4))
- Вызывает функцию
abs-average
с аргументом'(1 2 3 4)
. - Результатом будет
(1 2 -3 -4)
.
- Вызывает функцию
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д