Вывести список сумм подсписков заданного списка - Lisp

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

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

Требуется написать функцию, выводящую список сумм подсписков заданного списка. Я написал для простых подсписков, например (f '((2 5 7) (8 5 2) (1 2))) ==> (14 15 3), но надо чтобы ещё работало для многоуровневых подсписков, например (f '((2 5 7 (8 5 2 (1 2))))) ==> (14 (15 (3)))

Решение задачи: «Вывести список сумм подсписков заданного списка»

textual
Листинг программы
(defun sum (w)
  (cons (loop for a in w when (atom a) sum a)
        (loop for a in w when (listp a) collect (sum a))))
 
> (sum '(1 2 3 (4 5 6) 7 (4 5) 8 9))
(30 (15) (9))
> (sum '(1 2 3 (4 5 6) 7 (4 5) 8 9 (8 9)))
(30 (15) (9) (17))

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

В коде определён функцией SUM с одним аргументом W. Функция сначала создаёт список из аргумента W, затем рекурсивно вызывает себя для каждого элемента списка. Если элемент является атомом, то он добавляется к сумме. Если элемент является списком, то функция вызывает себя для этого элемента и добавляет результат к сумме. Код выводит список сумм подсписков заданного списка.

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


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

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

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