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