(define (is-empty-set? S) (if (eq? () S) #t #f) ) (define (member? S e) (cond ((is-empty-set? S) #f) ((eq? (car S) e) #t) (else (member? (cdr S) e)) )) (define (insert S e) (if (member? S e) S (cons e S))) (define (delete S e) (cond ((is-empty-set? S) S) ((eq? (car S) e) (cdr S)) (else (cons (car S) (delete (cdr S) e)) ) )) (define (union S A) (cond ((is-empty-set? S) A) ((is-empty-set? A) S) (else (append (union S (cdr A)) (if (member? S (car A)) () (list (car A))) )))) (define (intersection A B) (cond ((is-empty-set? A) A) ((is-empty-set? B) B) (else (append (intersection B (cdr A)) (if (member? B (car A)) (list (car A)) ()) )))) (define (difference S A) (cond ((is-empty-set? S) S) ((is-empty-set? A) S) (else (append (difference (cdr S) A) (if (member? A (car S)) () (list (car S))) )))) (define (cardinality S) (length S)) (define (set-equal? A B) (if (and (eq? (cardinality A) (cardinality B)) (eq? (difference A B) ())) #t #f )) (define (power-set S) (cond ((is-empty-set? S) (list ())) (else (append (power-set (cdr S)) (map (lambda (a) (cons (car S) a)) (power-set (cdr S))) ; (list (list (car S))) )))) (define (cartesian-product A B) (cond ((is-empty-set? A) A) ((is-empty-set? B) B) (else (append (cartesian-product (cdr A) B) (map (lambda (b) (cons (car A) (list (list (car A) b)))) B) ))))