Не могу понять ошибку - Lisp

Узнай цену своей работы

Формулировка задачи:

ну я типо студент и делалось все на "интуитивном" уровне и я хз че над сделать, выдает ошибку: Помогите, пожалуйста, найти причину ошибки ";; Error: Call to undefined function SP in USL2" в следующем коде: я не поиму откуда взялась ошибка связанная с функцией =\ хелпоните плз, а то просидел несколько часов, а ошибку так и не понял =(
(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. Список выражений в коде:

  1. (defun abs-average (w &aux (m (float (/ (reduce #'+ w) (length w)))))
    • Создает функцию abs-average, которая принимает аргумент w и вспомогательную переменную m.
    • m инициализируется как среднее значение элементов вектора w, используя функцию reduce для суммирования всех элементов вектора w и деления на длину вектора.
  2. `(loop for a in w collect (if (> (abs a) m) (* a -1) a))]
    • Начинает цикл loop для каждого элемента a в векторе w.
    • Если abs(a) больше m, то элемент умножается на -1.
    • Все элементы, удовлетворяющие условию, собираются в новый вектор.
  3. > (abs-average '(1 2 3 4))
    • Вызывает функцию abs-average с аргументом '(1 2 3 4).
    • Результатом будет (1 2 -3 -4).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5