(defun calculate-level-sums (lst)
(let ((level-sums (make-hash-table)))
(labels ((process-level (sublist level)
(let () ; Необязательное, но делает код понятнее
(dolist (item sublist)
(cond
((numberp item)
(incf (gethash level level-sums 0) item))
((listp item)
(process-level item (1+ level))))))))
(process-level lst 1))
(let ((result '()))
; Всегда добавляем уровень 1 с суммой 0, если он еще не был обработан
(unless (gethash 1 level-sums)
(setf (gethash 1 level-sums) 0)) ; Устанавливаем сумму для уровня 1
(maphash (lambda (level sum)
(push (list level sum) result))
level-sums) ; Собираем пары level/sum
(sort result #'< :key #'car))))
(format t "~a~%" (calculate-level-sums '(a (b (4 (2 e (3) k 15) e 5) 7))))
; Теперь должно выводить ((1 0) (2 7) (3 9) (4 17) (5 3))
;Проверка другими входными значениями
(format t "~a~%" (calculate-level-sums '(a b c))) ;((1 0))
(format t "~a~%" (calculate-level-sums '(1 (2 (3))))) ;Выводит ((1 1) (2 2) (3 3))
KGRlZnVuIGNhbGN1bGF0ZS1sZXZlbC1zdW1zIChsc3QpCiAgKGxldCAoKGxldmVsLXN1bXMgKG1ha2UtaGFzaC10YWJsZSkpKQoKICAgIChsYWJlbHMgKChwcm9jZXNzLWxldmVsIChzdWJsaXN0IGxldmVsKQogICAgICAgICAgICAgICAobGV0ICgpIDsg0J3QtdC+0LHRj9C30LDRgtC10LvRjNC90L7QtSwg0L3QviDQtNC10LvQsNC10YIg0LrQvtC0INC/0L7QvdGP0YLQvdC10LUKICAgICAgICAgICAgICAgICAoZG9saXN0IChpdGVtIHN1Ymxpc3QpCiAgICAgICAgICAgICAgICAgICAoY29uZAogICAgICAgICAgICAgICAgICAgICAoKG51bWJlcnAgaXRlbSkKICAgICAgICAgICAgICAgICAgICAgIChpbmNmIChnZXRoYXNoIGxldmVsIGxldmVsLXN1bXMgMCkgaXRlbSkpCiAgICAgICAgICAgICAgICAgICAgICgobGlzdHAgaXRlbSkKICAgICAgICAgICAgICAgICAgICAgIChwcm9jZXNzLWxldmVsIGl0ZW0gKDErIGxldmVsKSkpKSkpKSkKCiAgICAgIChwcm9jZXNzLWxldmVsIGxzdCAxKSkKCiAgICAobGV0ICgocmVzdWx0ICcoKSkpCiAgICAgIDsg0JLRgdC10LPQtNCwINC00L7QsdCw0LLQu9GP0LXQvCDRg9GA0L7QstC10L3RjCAxINGBINGB0YPQvNC80L7QuSAwLCDQtdGB0LvQuCDQvtC9INC10YnQtSDQvdC1INCx0YvQuyDQvtCx0YDQsNCx0L7RgtCw0L0KICAgICAgKHVubGVzcyAoZ2V0aGFzaCAxIGxldmVsLXN1bXMpCiAgICAgICAgKHNldGYgKGdldGhhc2ggMSBsZXZlbC1zdW1zKSAwKSkgOyDQo9GB0YLQsNC90LDQstC70LjQstCw0LXQvCDRgdGD0LzQvNGDINC00LvRjyDRg9GA0L7QstC90Y8gMQoKICAgICAgKG1hcGhhc2ggKGxhbWJkYSAobGV2ZWwgc3VtKQogICAgICAgICAgICAgICAgIChwdXNoIChsaXN0IGxldmVsIHN1bSkgcmVzdWx0KSkKICAgICAgICAgICAgICAgbGV2ZWwtc3VtcykgIDsg0KHQvtCx0LjRgNCw0LXQvCDQv9Cw0YDRiyBsZXZlbC9zdW0KCiAgICAgIChzb3J0IHJlc3VsdCAjJzwgOmtleSAjJ2NhcikpKSkKCgooZm9ybWF0IHQgIn5hfiUiIChjYWxjdWxhdGUtbGV2ZWwtc3VtcyAnKGEgKGIgKDQgKDIgZSAoMykgayAxNSkgZSA1KSA3KSkpKQo7INCi0LXQv9C10YDRjCDQtNC+0LvQttC90L4g0LLRi9Cy0L7QtNC40YLRjCAoKDEgMCkgKDIgNykgKDMgOSkgKDQgMTcpICg1IDMpKQoKO9Cf0YDQvtCy0LXRgNC60LAg0LTRgNGD0LPQuNC80Lgg0LLRhdC+0LTQvdGL0LzQuCDQt9C90LDRh9C10L3QuNGP0LzQuAooZm9ybWF0IHQgIn5hfiUiIChjYWxjdWxhdGUtbGV2ZWwtc3VtcyAnKGEgYiBjKSkpIDsoKDEgMCkpCihmb3JtYXQgdCAifmF+JSIgKGNhbGN1bGF0ZS1sZXZlbC1zdW1zICcoMSAoMiAoMykpKSkpIDvQktGL0LLQvtC00LjRgiAoKDEgMSkgKDIgMikgKDMgMykpCg==