Вывести список сумм подсписков заданного списка - 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, затем рекурсивно вызывает себя для каждого элемента списка. Если элемент является атомом, то он добавляется к сумме. Если элемент является списком, то функция вызывает себя для этого элемента и добавляет результат к сумме. Код выводит список сумм подсписков заданного списка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д