Множество атомов, входящих только в первый из двух списков - Lisp
Формулировка задачи:
Здравствуйте, помогите пожалуйста решить задачу и нужно привести набор тестовых вызовов описанной функции.:
1. Опишите функцию, аргументами которой являются два списка, а результатом — множество, содержащее атомы, принадлежащие только первому списку, учитывая все атомы всех подсписков обоих списков.
Решение задачи: «Множество атомов, входящих только в первый из двух списков»
textual
Листинг программы
- (defun deep-set-difference (w v)
- (set-difference (flatten w) (flatten v)))
- (defun flatten (w)
- (loop for a in w if (listp a) nconc (flatten a)
- else collect a))
- > (deep-set-difference '(a e (((b)) c)) '(a (b (((c)))) d))
- (E)
Объяснение кода листинга программы
В коде представлена функция глубокого пересечения множеств.
- Функция
deep-set-difference
принимает два аргумента:w
иv
. - Функция
flatten
используется для преобразования аргументовw
иv
в одномерные списки. - В функции
flatten
используется циклloop
для обхода каждого элемента спискаw
. - Если элемент является списком, то рекурсивно вызывается функция
flatten
для его преобразования в одномерный список. - Если элемент не является списком, то он добавляется в результирующий список.
- Результатом функции
deep-set-difference
является разница между двумя спискамиw
иv
. - Результатом функции
flatten
является одномерный список. - Результатом вызова функции
deep-set-difference
с аргументами'(a e (((b)) c))
и'(a (b (((c)))) d)
является список'e'
. - Это происходит потому, что функция
deep-set-difference
находит все элементы, которые есть в первом списке, но отсутствуют во втором списке. - В данном случае, элемент
'e'
присутствует только в первом списке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д