(define (element-of-set? x set)
  (cond ((null?  set) #f)
	((= x (car set)) #t)    ;; should it be equal? (SICP1 & SICP2 (page 152))
	(else (element-of-set? x (cdr set)))))


(define (adjoint-set x set)  ;; don't allow duplicates
  (if (element-of-set? x set)
      set
      (cons x set)))

(define (intersection-set set1 set2)
  (cond ((or (null? set1) (null? set2)) '())
	((element-of-set? (car set1) set2)
	 (cons (car set1)
	       (intersection-set (car set1) set2)))
	(else (intersection-set (cdr set1) set2))))


(define (setdiff set1 set2)
  (cond ((null? set1) '())
	((member? (car set1) set2)
	 (setdiff (cdr set1) set2))
	(else (cons (car set1)
		    (setdiff (cdr set1) set2)))))


(define intersectall
  (lambda (l-set)    ;; non-empty! o
    (cond 
     ((null? (cdr lset) (car lset)))
     (else (intersect (car lset)
		      (intersectall (cdr lset)))))))
	   
		      
	 
	 
