Два множества представлены списками. Найти объединение множеств - Lisp

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

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

Два множества представлены списками. Найти объединение множеств. Нужно сделать эту задачу циклами без рекурсии, взял из учебника функцию проверки элемента

a

в списке

l

Листинг программы
  1. (defun in (a l)
  2. (loop
  3. ((null l) nil) ; элемент не может принадлежать пустому множеству
  4. ((eq a (car l)) t) ; элемент принадлежит множеству, если в нем содержится
  5. (setq l (cdr l)) ; продолжаем проверку
  6. )) но выдает ошибку : *** - SYSTEM::%EXPAND-FORM: (NULL L) should be a lambda expression
  7. Хочу засунуть в функцию union
  8. (defun union (a b)
  9. (let ((buf nil))
  10. (loop
  11. ((null a) b)
  12. ((null b) a)
  13. (if (in (car a) b) nil (push (car a) buf))
  14. (setq a (cdr a))
  15. )
  16. (reverse buf)
  17. ))

Решение задачи: «Два множества представлены списками. Найти объединение множеств»

textual
Листинг программы
  1. (defun union-set (s1 s2)
  2.   (let ((r s1))
  3.     (dolist (a s2 r)
  4.       (unless (member a s1) (push a r)))))
  5.  
  6. ==> UNION-SET
  7.  
  8. (union-set '(1 2 3 4 5) '(2 3 4 6 7 8 9))
  9.  
  10. ==> (9 8 7 6 1 2 3 4 5)

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

В этом коде функция UNION-SET принимает два аргумента — списки S1 и S2. Она возвращает список, содержащий все элементы из обоих списков, которые не содержатся в первом списке. Сначала функция инициализирует пустой список R, который будет содержать результат. Затем она перебирает каждый элемент из второго списка S2. Если элемент не содержится в первом списке S1, он добавляется в конец списка R с помощью функции PUSH. В итоге, список R будет содержать все элементы из обоих списков, которые не содержатся в первом списке. Вернувшийся результат — это список R.

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


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

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

10   голосов , оценка 4 из 5

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

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

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