Реверс произвольного списка, включая подсписки (XLisp)

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

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

Здравствуйте! Поставлена следующая задача: Реверсировать произвольный список (включая подсписки). Вот решение:
Листинг программы
  1. (defun ddin (h n)
  2. (cond
  3. ((null n) nil)
  4. ((> h 0) (ddin (- h 1) (reverse n)))
  5. ( (not(atom (car n))) ( cons (ddin (+ h 1) (car n)) (ddin h (cdr n))) )
  6. (t (cons (car n) (ddin h (cdr n))))
  7. )
  8. )
  9. (defun din (n)
  10. (ddin 1 n)
  11. )
Как ещё можно решить эту задачу НЕ используя функцию REVERSE ? (XLisp)

Решение задачи: «Реверс произвольного списка, включая подсписки (XLisp)»

textual
Листинг программы
  1. (defun rev-list (lst &aux r)
  2.   (dolist (i lst r)
  3.     (push (if (atom i) i (rev-list i)) r)))
  4.  
  5. ==> rev-list
  6.  
  7. (rev-list '(1 2 3 4))
  8.  
  9. ==> (4 3 2 1)
  10.  
  11. (rev-list '(1 (2 3) 4))
  12.  
  13. ==> (4 (3 2) 1)

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

В коде определённая функция rev-list с двумя аргументами lst и r. Функция dolist используется для перебора элементов списка lst с помощью i в качестве временной переменной и r в качестве результата. Если элемент i является атомом, он помещается в начало списка r с помощью функции push. Если элемент i является списком, вызывается рекурсивно функция rev-list с аргументом i, и результат помещается в начало списка r с помощью функции push. После завершения перебора списка lst с помощью dolist, результат r будет содержать список, элементы которого расположены в обратном порядке. Поэтому, если мы применим функцию rev-list к списку (1 2 3 4), мы получим (4 3 2 1). Если мы применим функцию rev-list к списку (1 (2 3) 4), мы получим (4 (3 2) 1).

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


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

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

5   голосов , оценка 4.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы