Функция объединения двух списков - Lisp
Формулировка задачи:
Добрый день.
Помогите пожалуйста решить такую задачу :
Разработать функцию, находящую теоретико-множественное объединение двух списков.
Например:
Вход: (1 2 3 4 5), (4 5 6 7).
Выход: (1 2 3 4 5 6 7).
Спасибо за внимание.
Решение задачи: «Функция объединения двух списков»
textual
Листинг программы
(defun union* (set1 set2) (append set1 (remove-if #'(lambda (x) (member x set1)) set2))) ==> union* (union* '(1 2 3) '(2 3 4)) ==> (1 2 3 4) (defun union$ (set1 set2) ;; HomeLisp (let ((res set1)) (iter (for x in set2) (unless (member x set1) (collecting x into res))) res)) ==> union$ (union$ '(1 2 3) '(2 3 4)) ==> (1 2 3 4) (defun union& (set1 set2) ;; HomeLisp (setof (append set1 set2))) ==> union& (union& '(1 2 3) '(2 3 4)) ==> (1 2 3 4)
Объяснение кода листинга программы
В данном коде представлено три функции, которые выполняют объединение двух множеств (списков):
union*
- реализует объединение с помощью функцииappend
и удаляет дубликаты с помощью функцииremove-if
и лямбда-функции, которая проверяет наличие элемента в первом множестве.union$
- реализует объединение с помощью цикла и функцииmember
, которая проверяет наличие элемента во втором множестве.union&
- реализует объединение с помощью функцииsetof
и операцииappend
. Для примера, все три функции применяются к двум спискам(1 2 3)
и(2 3 4)
, и возвращают результат(1 2 3 4)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д