Функция должна возвращать список, содержащий элементы исходного списка, перечисленные в обратном порядке - Lisp

Узнай цену своей работы

Формулировка задачи:

Функция должна возвращать список, содержащий элементы исходного списка (в том числе входящие в подсписки), перечисленные в обратном порядке. Например, результатом применения функции к аргументу ’(a (b c (d)) e) должен быть список ’(e ((d) c b) a).

Решение задачи: «Функция должна возвращать список, содержащий элементы исходного списка, перечисленные в обратном порядке»

textual
Листинг программы
(defun deep-reverse (w) 
  (mapcar #'(lambda (a) (if (atom a) a
                            (deep-reverse a)))
          (reverse w)))
 
> (deep-reverse '(a (b c (1 d 2)) e))
(E ((2 D 1) C B) A)
> (deep-reverse '(e ((2 d 1) c b) a))
(A (B C (1 D 2)) E)

Объяснение кода листинга программы

В данном коде определена функция deep-reverse, которая принимает один аргумент w. Сначала, с помощью функции mapcar, вызывается анонимная функция, которая рекурсивно обращается к функции deep-reverse для каждого элемента списка w. Если элемент является атомом, он добавляется в новый список в обратном порядке. Затем, с помощью функции reverse, полученный список w переворачивается. В итоге, функция deep-reverse возвращает список, содержащий элементы исходного списка, перечисленные в обратном порядке. Примеры использования функции:

  1. (deep-reverse '(a (b c (1 d 2)) e)). Вывод: (E ((2 D 1) C B) A).
  2. (deep-reverse '(e ((2 d 1) c b) a)). Вывод: (A (B C (1 D 2)) E).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5
Похожие ответы