Вывод результата функции в обратном порядке - Lisp

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

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

Добрый вечер. Мне необходимо удалить из списка каждый третий элемент и вывести список в обратном порядке. По отдельности обе задачи решены на форуме. А вот соединить у меня не получается (да и возможно ли это?). Удаление каждого третьего элемента.
Листинг программы
  1. (defun del3 (lst &optional (c 1))
  2. (cond ((null lst) nil)
  3. ((= c 3) (del3 (cdr lst) 1))
  4. (t (cons (car lst) (del3 (cdr lst) (1+ c))))))
Мой вариант, который показывает чёрти-что:
Листинг программы
  1. (defun del3 (lst &optional (c 1))
  2. (cond ((null lst) nil)
  3. ((= c 3) (del3 (cdr lst) 1))
  4. (t (list (del3 (cdr lst) (1+ c)) (car lst)))))

Решение задачи: «Вывод результата функции в обратном порядке»

textual
Листинг программы
  1. (defun del3 (lst &optional (c 1) (r nil))
  2.   (cond ((null lst) r)
  3.         ((= c 3) (del3 (cdr lst) 1 r))
  4.         (t (del3 (cdr lst) (+ 1 c) (cons (car lst) r)))))
  5.  
  6. ==> DEL3
  7.  
  8. (del3 '(1 2 3 4 5 6 7 8 9 10))
  9.  
  10. ==> (10 8 7 5 4 2 1)

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

В коде определена функция del3. Она принимает два аргумента: lst и c, а также опциональный аргумент r.

  1. Если lst равно nil, то возвращается r.
  2. Если c равно 3, то вызывается функция del3 для cdr lst и аргументом c увеличивается на 1, а r остается без изменений.
  3. В противном случае, вызывается функция del3 для cdr lst, при этом c увеличивается на 1, а r дополняется новым элементом, который является первым элементом lst, и остальными элементами, сохраненными в r. При вызове функции del3 с аргументом lst равным '(1 2 3 4 5 6 7 8 9 10) и c равным 1, функция возвращает '(10 8 7 5 4 2 1). Это происходит потому, что c равно 1, поэтому для каждого элемента lst вызывается функция del3 с c равным 2, 3, 4, 5, 6, 7, 8, 9, и 10. В результате получается обратный порядок элементов lst.

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


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

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

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

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

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

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