Функция объединения двух списков - Lisp

Узнай цену своей работы

Формулировка задачи:

Добрый день. Помогите пожалуйста решить такую задачу : Разработать функцию, находящую теоретико-множественное объединение двух списков. Например: Вход: (1 2 3 4 5), (4 5 6 7). Выход: (1 2 3 4 5 6 7). Спасибо за внимание.

Решение задачи: «Функция объединения двух списков»

textual
Листинг программы
  1. (defun union* (set1 set2)
  2.   (append set1 (remove-if #'(lambda (x) (member x set1)) set2)))
  3.  
  4. ==> union*
  5.  
  6. (union* '(1 2 3) '(2 3 4))
  7.  
  8. ==> (1 2 3 4)
  9.  
  10.  
  11. (defun union$ (set1 set2) ;; HomeLisp
  12.   (let ((res set1))
  13.     (iter (for x in set2) (unless (member x set1) (collecting x into res)))
  14.     res))
  15.  
  16. ==> union$
  17.  
  18. (union$ '(1 2 3) '(2 3 4))
  19.  
  20. ==> (1 2 3 4)
  21.  
  22. (defun union& (set1 set2) ;; HomeLisp
  23.   (setof (append set1 set2)))
  24.  
  25. ==> union&
  26.  
  27. (union& '(1 2 3) '(2 3 4))
  28.  
  29. ==> (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы