Перестроить список в список средних арифметических элементов циклом - Lisp

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

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

Всем доброго времени суток, возникла необходимость решить мою прошлую задачу циклом Перестроить список в список средних арифм. элементов Условие:Дан список чисел а1....an. Получить список чисел b1…bn, где bi – среднее арифметическое всех членов последовательности a1….an, кроме ai.
(defun task (lst (s (apply '+ lst))) 
  (loop while (not ((null lst) nil)) do(
  (t (cons (/ (- s (car lst)) l) )))))
В строке (loop while (not ((null lst) nil)) do ошибка: (NULL LST) should be a lambda expression, как решить? пробовал запрет на вычисление ставить и добавлять перед условием t, не помогло.

Решение задачи: «Перестроить список в список средних арифметических элементов циклом»

textual
Листинг программы
(defun task (lst &aux (s (apply '+ lst)) (l (- (length lst) 1)))
  (let ((r nil))
    (dolist (i lst (reverse r))
      (push (/ (- s i) l) r))))
 
==> task
 
(task '(1 2 3 4 5 6 7))
 
==> (9/2 13/3 25/6 4 23/6 11/3 7/2)

Объяснение кода листинга программы

В этом коде функция task принимает список в качестве входного аргумента и возвращает список средних арифметических элементов. Вот список шагов, которые выполняются в коде:

  1. Создается новая функция task, которая принимает список lst в качестве аргумента.
  2. Внутри функции task создаются две переменные: s и l. Значение переменной s равно сумме всех элементов списка lst. Значение переменной l равно длине списка lst, уменьшенной на 1.
  3. Создается пустой список r, который будет содержать средние арифметические значения.
  4. Начинается цикл dolist, который перебирает элементы списка lst в обратном порядке.
  5. Внутри цикла dolist выполняется следующая последовательность действий:
    • Вычисляется значение среднего арифметического, путем деления суммы всех элементов списка lst на значение переменной l.
    • Это значение добавляется в конец списка r.
  6. По завершении цикла dolist возвращается список r. В результате выполнения функции task со списком [1 2 3 4 5 6 7] в качестве аргумента, будет возвращен список [9/2 13/3 25/6 4 23/6 11/3 7/2].

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


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

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

5   голосов , оценка 3.6 из 5
Похожие ответы