Разность списков - Lisp
Формулировка задачи:
Определите функцию, зависящую от двух аргументов u и v,
являющихся списками, которая вычисляет список всех элементов u, не
содержащихся в v.
Я пытался:
(defun f (u v)
(cond ((null u) nil)
((equal (car u)(car v)) (f (cdr u)(cdr v)))
(t (cons(car u) (f (cdr u)(cdr v)))) ))
(f '(x y a f b 7 y x a b)'(x y a f b d h o u t p p r x))
==> (7 y x a b)Решение задачи: «Разность списков»
textual
Листинг программы
(defun diff-lists (x y) (remove-if #'(lambda (z) (member z y)) x)) ==> DIFF-LISTS (diff-lists '(1 2 3 4 5) '(3 4 5 6 7 8)) ==> (1 2)
Объяснение кода листинга программы
В коде определена функция DIFF-LISTS, которая принимает два аргумента X и Y. Функция использует оператор REMOVE-IF для фильтрации списка X, который возвращает только те элементы, которые не встречаются в списке Y. То есть функция возвращает список, вычтенный из первого списка, который содержит только общие элементы с вторым списком. При вызове функции с аргументами '(1 2 3 4 5) и '(3 4 5 6 7 8) возвращается список (1 2), так как эти элементы отсутствуют во втором списке.