Вывести элементы 1го списка, не содержащего эл-ты остальных списков - Lisp
Формулировка задачи:
(defun SR (SP1 SP2 SP3) (setq SP ())(foreach EL1 SP1 (if (and (not (member EL1 SP2)) (not (member EL1 SP3))) (setq SP (cons EL1 SP)) ) ) (reverse SP)
Решение задачи: «Вывести элементы 1го списка, не содержащего эл-ты остальных списков»
(defun f (l &rest lsts) (remove-if #'(lambda (e) (dolist (i lsts nil) (when (member e i) (return t)))) l)) F [2]> (f '(1 2 3 4 5 6 7 8 9) '(1 3) '(3 5) '(5 7) '(7 9) '(9 11) '(11 13)) (2 4 6 8)
Объяснение кода листинга программы
В данном коде определённая функция f
принимает первый аргумент l
— список, который необходимо проверить, и остальные аргументы lsts
— списки, которые необходимо учесть при проверке.
Для решения поставленной задачи используется функция remove-if
, которой в качестве первого аргумента передаётся лямбда-функция с заданным условием. В данном случае условие задано так, чтобы оставлять только те элементы из первого списка, которые не содержатся в остальных списках.
В лямбда-функции с помощью цикла dolist
перебираются все элементы списков lsts
. Для каждого элемента проверяется, содержится ли текущий элемент из первого списка в данном списке. Если содержится, то лямбда-функция возвращает t
, иначе возвращает nil
.
В функции remove-if
возвращается новый список, в котором удалены все элементы, для которых лямбда-функция вернула t
.
Таким образом, результатом выполнения кода будет список, содержащий только элементы первого списка, которые не содержатся в остальных списках.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д