Написать функцию, удаляющую из исходного списка подсписки заданной глубины - Lisp

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

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

Помогите сделать задание, нужно сделать через рекурсию, циклы нельзя использовать

Решение задачи: «Написать функцию, удаляющую из исходного списка подсписки заданной глубины»

textual
Листинг программы
(defun del-list (lst lv)
  (if (= lv 1) (remove-if #'listp lst) 
               (mapcar #'(lambda (x) (if (listp x) (del-list x (- lv 1)) x)) lst)))
 
==> DEL-LIST
 
(del-list '(1 2 3 ((4 5) 6 7)) 1)
 
==> (1 2 3)
 
(del-list '(1 2 3 ((4 5) 6 7)) 2)
 
==> (1 2 3 (6 7))
 
(del-list '(1 2 3 ((4 5) 6 7)) 3)
 
==> (1 2 3 ((4 5) 6 7))

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

Функция del-list принимает два аргумента: lst и lv. Аргумент lst — это список, из которого необходимо удалить подсписки заданной глубины, а lv — это сама глубина. Если lv равна 1, то функция удаляет все подсписки первого уровня вложенности из lst. Если lv больше 1, то функция рекурсивно вызывает саму себя для каждого элемента списка. Если элемент является списком, то функция вызывает себя для этого элемента и lv уменьшается на 1, иначе элемент остается неизменным. В конце концов, функция возвращает измененный список.

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


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

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

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