Написать функцию, удаляющую из исходного списка подсписки заданной глубины - 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, иначе элемент остается неизменным. В конце концов, функция возвращает измененный список.

ИИ для рефератов и докладов


  • Экспорт Word по ГОСТу
  • Минимум 80% уникальности текста
  • Поиск релевантных источников в интернете
  • Готовый документ за 2 минуты

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

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