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