Функция возвращает список сумм - Lisp

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

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

Функция возвращает список сумм: 1-го элемента, 2-х первых элементов, 3-х первых элементов и т.д Помогите пожалуйста разобраться в коде.
(defun sum (lst)
  (reverse (maplist #'(lambda (x) (apply '+ x)) (reverse lst))))

Решение задачи: «Функция возвращает список сумм»

textual
Листинг программы
(defun task (lst)
 (mapcar (lambda (x) (apply '+ x))
   (mapcar (lambda (n) (subseq lst 0 n)) (range 1 (length lst)))))
 
==> TASK
 
(task '(1 2 3 4 5 6))
 
==> (1 3 6 10 15 21)

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

В коде определена функция TASK, которая принимает в качестве аргумента список LST. Функция возвращает список сумм. Внутри функции используется два вложенных вызова функции MAPCAR:

  1. Первый вызов функции MAPCAR с лямбда-функцией (x) (apply '+ x) применяет к каждому элементу списка LST (x) функцию суммирования (apply '+ x).
  2. Второй вызов функции MAPCAR с лямбда-функцией (n) (subseq lst 0 n) выбирает подсписок LST от элемента с индексом 0 до элемента с индексом n.
  3. В обоих вызовах функции MAPCAR используется функция RANGE, которая возвращает последовательность целых чисел, начинающихся с 1 и продолжающихся до длины списка LST. Таким образом, функция TASK возвращает список сумм элементов с индексами от 0 до n-1, где n — длина списка LST.

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


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

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

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