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

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

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

Дан список чисел а1....an. Получить список чисел b1…bn, где bi – среднее арифметическое всех членов последовательности a1….an, кроме ai.Сделать нужно рекурсией. Что получилось сделать:
(DEFUN SUM (L)
(DO ( (S   0) )
( (NULL L) (setq K S))
(SETQ  S  (+  S  ( CAR L)  ) L  (CDR  L)  ) ) )
(DEFUN F(L1 L2)
       (COND ((NULL L1)L2)
         (T(SUM(L1)F(CDR L1)(CONS(CAR L1)L2)))))
но вызвать функцию для того чтобы посчитать просто сумму всех элементов не получилось. Так же непонятно следующее: Как получать текущий элемент и отнимать его от суммы в цикле?

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

textual
Листинг программы
;; racket-lang.org
(define (foo lst)
  (let ((len (sub1 (length lst)))
        (sum (apply + lst)))
    (map (lambda (i) (exact->inexact (/ (- sum i) len))) lst)))
 
(foo '(1 2 3 4 5 6))
; '(4.0 3.8 3.6 3.4 3.2 3.0)

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

В данном коде:

  1. foo - название функции, которая принимает один аргумент lst - список чисел.
  2. lst - список чисел, который передается в функцию foo.
  3. len - переменная, которая содержит длину списка lst.
  4. sum - переменная, которая содержит сумму всех чисел из списка lst.
  5. map - функция, которая применяет к каждому элементу списка lst указанную анонимную функцию.
  6. Анонимная функция (lambda (i) (exact->inexact (/ (- sum i) len)) - вычисляет среднее арифметическое каждого элемента списка lst.
  7. Результатом работы функции foo является новый список средних арифметических значений элементов исходного списка lst. Код работает следующим образом:
  8. Инициализируются переменные len и sum со значениями длины списка и суммы его элементов соответственно.
  9. С помощью функции map каждый элемент списка lst последовательно обрабатывается анонимной функцией, которая вычисляет среднее арифметическое и сохраняет результат в новый список.
  10. Результат работы функции foo выводится на экран. Для списка '(1 2 3 4 5 6) результатом работы функции будет список средних арифметических значений '(4.0 3.8 3.6 3.4 3.2 3.0).

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


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

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

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