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