Операции с множествами - Lisp

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

Доброе время суток! Нужно написать одну функцию которая производила такие операции с множествами M,N,K,P: (N ∩ (М – К))V P Без функций member, intersection , union Может кто-то помочь?

Код к задаче: «Операции с множествами - Lisp»

textual
(defun memb! (x y)
  (cond ((null y) nil)
        ((eq x (car y)) t)
        (t (memb! x (cdr y)))))
 
==> MEMB!
 
(defun union! (x y)
  (cond ((null x) y)
        ((memb! (car x) y) (union (cdr x) y))
        (t (cons (car x) (union! (cdr x) y)))))  
 
==> UNION!
 
(union! '(1 2 3 4) '(3 4 5 6))
 
==> (1 2 6 5 4 3)
 
(defun inters! (x y)
  (cond ((null x) nil)
        ((memb! (car x) y) (cons (car x) (inters! (cdr x) y)))
        (t (inters! (cdr x) y))))  
 
==> INTERS!
 
(inters! '(1 2 3 4 5 6) '(4 5 6 7 8))
 
==> (4 5 6)
 
(defun diff! (x y)
  (cond ((null x) nil)
        ((memb! (car x) y) (diff! (cdr x) y))
        (t (cons (car x) (diff! (cdr x) y)))))
 
==> DIFF!
 
(diff! '(1 2 3 4 5) '(3 4 5 6))
 
==> (1 2)
 
(defun task (m n k p)
  (union! (inters! (diff! m k) n) p))
 
==> TASK

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


СОХРАНИТЬ ССЫЛКУ