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

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

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

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

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

textual
Листинг программы
  1. (defun task (lst &aux (s (apply '+ lst)) (l (- (length lst) 1)))
  2.   (let ((r nil))
  3.     (dolist (i lst (reverse r))
  4.       (push (/ (- s i) l) r))))
  5.  
  6. ==> task
  7.  
  8. (task '(1 2 3 4 5 6 7))
  9.  
  10. ==> (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы