Функция объединения двух списков - 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)

Объяснение кода листинга программы

В данном коде представлено три функции, которые выполняют объединение двух множеств (списков):

  1. union* - реализует объединение с помощью функции append и удаляет дубликаты с помощью функции remove-if и лямбда-функции, которая проверяет наличие элемента в первом множестве.
  2. union$ - реализует объединение с помощью цикла и функции member, которая проверяет наличие элемента во втором множестве.
  3. union& - реализует объединение с помощью функции setof и операции append. Для примера, все три функции применяются к двум спискам (1 2 3) и (2 3 4), и возвращают результат (1 2 3 4).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы