(defun calculate-level-sums (lst) (let ((acc '())) ; Начальный аккумулятор (prepare-result (calculate-level-sums-helper lst 1 acc)))) (defun calculate-level-sums-helper (lst level acc) (cond ((null lst) acc) ; Базовый случай: пустой список (t (let ((item (car lst)) (rest (cdr lst))) (cond ((numberp item) (calculate-level-sums-helper rest level (update-level-sum acc level item))) ((listp item) (let ((inner-result (calculate-level-sums-helper item (1+ level) acc))) (calculate-level-sums-helper rest level inner-result))) (t (calculate-level-sums-helper rest level acc))))))) (defun update-level-sum (acc level value) (let ((existing (assoc level acc))) (if existing (let ((new-acc (remove existing acc :test #'equal))) (cons (list level (+ value (cadr existing))) new-acc)) (cons (list level value) acc)))) (defun prepare-result (acc) (if (assoc 1 acc) (sort acc #'< :key #'car) (sort (cons '(1 0) acc) #'< :key #'car))) ;; Тесты (format t "~a~%" (calculate-level-sums '(a (b (4 (2 e (3) k 15) e 5) 7)))) (format t "~a~%" (calculate-level-sums '(a b c))) (format t "~a~%" (calculate-level-sums '(1 (2 (3))))) (format t "~a~%" (calculate-level-sums '(1 2 (3 4 (5 6)))))
Standard input is empty
((1 0) (2 7) (3 9) (4 17) (5 3)) ((1 0)) ((1 1) (2 2) (3 3)) ((1 3) (2 7) (3 11))
Warning: reserving address range 0x80000c0000...0x1fffffffffff that contains memory mappings. clisp might crash later! Memory dump: 0x8000000000 - 0x80000bffff 0x154a39000000 - 0x154a392e4fff 0x154a39400000 - 0x154a39402fff 0x154a39403000 - 0x154a39601fff 0x154a39602000 - 0x154a39602fff 0x154a39603000 - 0x154a39603fff 0x154a39615000 - 0x154a39639fff 0x154a3963a000 - 0x154a397acfff 0x154a397ad000 - 0x154a397f5fff 0x154a397f6000 - 0x154a397f8fff 0x154a397f9000 - 0x154a397fbfff 0x154a397fc000 - 0x154a397fffff 0x154a39800000 - 0x154a39803fff 0x154a39804000 - 0x154a39a03fff 0x154a39a04000 - 0x154a39a04fff 0x154a39a05000 - 0x154a39a05fff 0x154a39a5f000 - 0x154a39a60fff 0x154a39a61000 - 0x154a39a70fff 0x154a39a71000 - 0x154a39aa4fff 0x154a39aa5000 - 0x154a39bdbfff 0x154a39bdc000 - 0x154a39bdcfff 0x154a39bdd000 - 0x154a39bdffff 0x154a39be0000 - 0x154a39be0fff 0x154a39be1000 - 0x154a39be2fff 0x154a39be3000 - 0x154a39be3fff 0x154a39be4000 - 0x154a39be5fff 0x154a39be6000 - 0x154a39be6fff 0x154a39be7000 - 0x154a39be7fff 0x154a39be8000 - 0x154a39be8fff 0x154a39be9000 - 0x154a39bf6fff 0x154a39bf7000 - 0x154a39c04fff 0x154a39c05000 - 0x154a39c11fff 0x154a39c12000 - 0x154a39c15fff 0x154a39c16000 - 0x154a39c16fff 0x154a39c17000 - 0x154a39c17fff 0x154a39c18000 - 0x154a39c1dfff 0x154a39c1e000 - 0x154a39c1ffff 0x154a39c20000 - 0x154a39c20fff 0x154a39c21000 - 0x154a39c21fff 0x154a39c22000 - 0x154a39c22fff 0x154a39c23000 - 0x154a39c50fff 0x154a39c51000 - 0x154a39c5ffff 0x154a39c60000 - 0x154a39d05fff 0x154a39d06000 - 0x154a39d9cfff 0x154a39d9d000 - 0x154a39d9dfff 0x154a39d9e000 - 0x154a39d9efff 0x154a39d9f000 - 0x154a39db2fff 0x154a39db3000 - 0x154a39ddafff 0x154a39ddb000 - 0x154a39de4fff 0x154a39de5000 - 0x154a39de6fff 0x154a39de7000 - 0x154a39decfff 0x154a39ded000 - 0x154a39deffff 0x154a39df2000 - 0x154a39df2fff 0x154a39df3000 - 0x154a39df3fff 0x154a39df4000 - 0x154a39df4fff 0x154a39df5000 - 0x154a39df5fff 0x154a39df6000 - 0x154a39df6fff 0x154a39df7000 - 0x154a39dfdfff 0x154a39dfe000 - 0x154a39e00fff 0x154a39e01000 - 0x154a39e01fff 0x154a39e02000 - 0x154a39e22fff 0x154a39e23000 - 0x154a39e2afff 0x154a39e2b000 - 0x154a39e2bfff 0x154a39e2c000 - 0x154a39e2cfff 0x154a39e2d000 - 0x154a39e2dfff 0x560e52bd3000 - 0x560e52cc3fff 0x560e52cc4000 - 0x560e52dcdfff 0x560e52dce000 - 0x560e52e2dfff 0x560e52e2f000 - 0x560e52e5dfff 0x560e52e5e000 - 0x560e52e8efff 0x560e52e8f000 - 0x560e52e92fff 0x560e54752000 - 0x560e54772fff 0x7ffc26e9f000 - 0x7ffc26ebffff 0x7ffc26fd5000 - 0x7ffc26fd8fff 0x7ffc26fd9000 - 0x7ffc26fdafff