Вот версия, которая работает для меня в Common-Lisp.
(defun reverse-list (list)
(if (atom list)
list ;; Not actually a list, return the atom
(reverse (mapcar #'reverse-list list)))
;; Testing it out
(reverse-list '((1 2 3) (4 5 (3 6))))
Вывод:
(((6 3) 5 4) (3 2 1))
Mapcar - это функция, которая принимает другую функцию в качестве первого параметра исписок в качестве второго параметра.Затем он вызывает эту функцию для каждого элемента списка.Возвращает список всех ответов.Поэтому после того, как я использую «mapcar», чтобы перевернуть все подсписки, я снова вызываю «реверс», чтобы перевернуть больший список.
Функция, которую он вызывает в каждом подсписке, называется «обратный список».Это проверяет, является ли список атомом.Если это так, то это возвращает себя.Если это список, то он вызывает mapcar снова для каждого элемента в списке, а затем инвертирует результат.