Пересечение, разность множеств - Lisp

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

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

не подскажите как реализовать пересечение и разность? например, пересечение : '(a s d (h)) '(h a y)) -> (a h); разность : '(a e r (k l)) '(k (l) r) ->(а е).

Решение задачи: «Пересечение, разность множеств»

textual
Листинг программы
(defun set-of (lst &optional (r nil))
  (cond ((null lst) r)
        ((atom (car lst)) (if (member (car lst) r) (set-of (cdr lst) r) (set-of (cdr lst) (cons (car lst) r))))
        (t (let ((tlist (set-of (car lst) r)))
             (set-of (cdr lst) tlist)))))
 
(defun inters (s1 s2)
  (cond ((null s1) nil)
        ((member (car s1) s2) (cons (car s1) (inters (cdr s1) s2)))
        (t (inters (cdr s1) s2))))
 
(defun intersect (lst1 lst2)
  (let ((s1 (set-of lst1))
        (s2 (set-of lst2)))
    (inters s1 s2)))
 
==> intersect
 
(intersect '(a s d (h)) '(h a y))
 
==> (h a)
 
(defun sdiff (s1 s2)
  (cond ((null s2) s1)
        ((member (car s2) s1) (sdiff (remove (car s2) s1) (cdr s2)))
        (t (sdiff s1 (cdr s2)))))
 
 
(defun setdiff (lst1 lst2)
  (let ((s1 (set-of lst1))
        (s2 (set-of lst2)))
   (sdiff s1 s2)))
 
==> setdiff
 
(setdiff '(1 2 3 ((3)) 4 ((4 5 6))) '(1 (((3)))))
 
==> (6 5 4 2)

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

  1. На каком языке программирования написан код?
  2. Какая задача решается в коде?
  3. Что делает функция SET-OF?
  4. Что делает функция INTERSECTS?
  5. Что делает функция SET-DIFFERENCE?
  6. Что делает функция SETDIFF?

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


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

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

6   голосов , оценка 3.833 из 5