Пересечение, разность множеств - 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)
Объяснение кода листинга программы
- На каком языке программирования написан код?
- Какая задача решается в коде?
- Что делает функция SET-OF?
- Что делает функция INTERSECTS?
- Что делает функция SET-DIFFERENCE?
- Что делает функция SETDIFF?
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д