Дан список с возможными подсписками. Задача - изменить порядок всех элементов списка, причем порядок в подсписках также должен быть изменён на обратный.
(defun reverse-tree (arg)
(if (atom arg)
arg
(let ((acc ())) ; список-накопитель
(dolist (head arg)
(push (reverse-tree head) acc))
acc)))
(reverse-tree '(a b (1 2) (3 4 5) c)))
(C (5 4 3) (2 1) B A)
Сложность алгоритма - О(n), где n - общее число листьев (атомов) в дереве.