Удалять только четные и выполнить условие с вложенными подсписками - Lisp
Формулировка задачи:
Задача такова: Сделать так,чтобы удаляло только четные, те, которые делятся на 2 без остатка, и выполнить условие с вложенными подсписками.
Задание 1_5
В произвольном списке удалить элементы с номерами N и M (без учета скобок)
(defun din (n m l) (cond ((null l) nil) ( (not(atom (car l))) ( cons (din n m (car l)) (din (- n (length (car l))) (- m (length (car l))) (cdr l))) ) ((or (= n 1) (= m 1)) (din (- n 1) (- m 1) (cdr l)) ) (t (cons (car l) (din (- n 1) (- m 1) (cdr l)))) ) )
Решение задачи: «Удалять только четные и выполнить условие с вложенными подсписками»
textual
Листинг программы
(defun drop (w n m) (loop for a in w for b from 1 if (listp a) collect (drop a n m) else unless (and (numberp a) (evenp a) (or (= b n) (= b m))) collect a)) > (drop '(a b (a b c 4 d e 5) 4 c d 5 e) 4 7) (A B (A B C D E 5) C D 5 E)
Объяснение кода листинга программы
В данном коде определён функционал drop, который удаляет указанное количество первых элементов из списка. Если список является вложенным, то рекурсивно вызывается функция drop для удаления элементов из вложенного списка. В данном случае, указанные элементы, которые необходимо удалить, это четные числа, которые находятся на позициях 4 и 7 в списке. Вот список с пояснениями к коду:
- (defun drop (w n m) - определение функции drop, которая принимает три аргумента: w (список), n (количество элементов для удаления на текущем уровне) и m (количество элементов для удаления вложенных списков).
- (loop for a in w for b from 1 - начало цикла, который проходит по всем элементам списка w. b - счётчик для вложенных списков.
- if (listp a) collect (drop a n m) - если элемент списка является списком, то рекурсивно вызывается функция drop для удаления элементов из вложенного списка.
- else unless (and (numberp a) (evenp a) (or (= b n) (= b m))) - если элемент не является списком, то проверяется, является ли он числом и чётным. Если это так и счётчик вложенных списков равен n или m, то элемент удаляется.
- collect a) - все остальные элементы, которые не удовлетворяют условиям, собираются в новый список.
-
(drop '(a b (a b c 4 d e 5) 4 c d 5 e) 4 7) - вызов функции drop с аргументами: '(a b (a b c 4 d e 5) 4 c d 5 e), 4 и 7.
- (A B (A B C D E 5) C D 5 E) - результат работы функции drop.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д