Опpеделите функцию, возвращающую объединение двух множеств - Lisp

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

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

Опpеделите функцию, возвращающую объединение двух множеств.

Решение задачи: «Опpеделите функцию, возвращающую объединение двух множеств»

textual
Листинг программы
(defun union-sets (a b)
  (cond ((null a) b)
        (t (cons (car a) (union-sets (remove (car a) (cdr a))
                                     (remove (car a) b)))))) 
 
==> union-sets
 
(union-sets '(a s d h j) '(a s c v b))
 
==> (a s d h j c v b)

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

В этом коде определена функция UNION-SETS, которая принимает два аргумента — множественное значение A и B. Если A равно NIL, то функция возвращает B. Если A не равно NIL, то функция возвращает результат выполнения следующих действий:

  1. CAR (первый элемент) из A сохраняется в переменную X.
  2. A модифицируется — из него удаляется первый элемент (X), и новая версия A передается в функцию UNION-SETS рекурсивно.
  3. B модифицируется — из него удаляется первый элемент (X), и новая версия B передается в функцию UNION-SETS рекурсивно.
  4. Результатом работы рекурсивных вызовов функции UNION-SETS будет список, который включает в себя X и все элементы, возвращенные рекурсивными вызовами функции UNION-SETS для A и B. Таким образом, UNION-SETS возвращает объединение множеств A и B. Пример использования функции UNION-SETS: (union-sets '(a s d h j) '(a s c v b)) Эта строка кода вызывает функцию UNION-SETS с аргументами '(a s d h j) и '(a s c v b). Согласно алгоритму, первый элемент из первого аргумента (A) — 'a, сохраняется в переменную X. Затем первый элемент из второго аргумента (B) — 'a, удаляется из B, и новая версия B передается в рекурсивный вызов функции UNION-SETS. Рекурсивный вызов функции UNION-SETS для B возвращает '(s c v b). Рекурсивный вызов функции UNION-SETS для A возвращает '(d h j C V B). Наконец, UNION-SETS возвращает объединение результатов рекурсивных вызовов: '(a s d h j C V B).

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


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

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

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