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