Список: Сформировать из 3 списков новый, изъяв элементы, которые совпадают (логическое "ИЛИ") - Lisp
Формулировка задачи:
Помогите разработать рекурсивную функцию для работы со списками:
Нужно сформировать из 3 списков новый, изъяв элементы, которые совпадают (логическое "ИЛИ")
Решение задачи: «Список: Сформировать из 3 списков новый, изъяв элементы, которые совпадают (логическое "ИЛИ")»
textual
Листинг программы
- (defun inters (s1 s2)
- (cond ((null s1) nil)
- ((member (car s1) s2) (cons (car s1) (inters (cdr s1) s2)))
- (t (inters (cdr s1) s2))))
- ==> inters
- (inters '(1 2 3 4) '( 3 4 5 6))
- ==> (3 4)
- (defun diff (s1 s2)
- (cond ((null s1) nil)
- ((member (car s1) s2) (diff (cdr s1) s2))
- (t (cons (car s1) (diff (cdr s1) s2)))))
- ==> diff
- (diff '(1 2 3 4 5) '(t y 3 4))
- ==> (1 2 5)
- (defun task (a1 a2 a3)
- (let ((a (append a1 a2 a3))
- (a12 (inters a1 a2))
- (a13 (inters a1 a3))
- (a23 (inters a2 a3)))
- (diff (diff (diff a a12) a13) a23)))
- ==> task
- (task '(1 2 3) '(1 4 5) '(1 3 6))
- ==> (2 4 5 6)
Объяснение кода листинга программы
В коде реализованы три функции:
inters
— принимает два списка, ищет пересечение множеств, используя операторOR
(логическое ИЛИ), и возвращает новый список, содержащий только уникальные элементы пересечения.diff
— принимает два списка, ищет разность множеств, используя операторOR
(логическое ИЛИ), и возвращает новый список, содержащий только уникальные элементы, которые есть в первом списке, но отсутствуют во втором.task
— принимает три списка, объединяет их в один список, затем находит пересечение первого и второго списков, пересечение первого и третьего списков и пересечение второго и третьего списков, а затем находит их разность. Возвращает новый список, содержащий только уникальные элементы, которые есть в первом списке, но отсутствуют в объединении второго и третьего списков.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д