; Reba Orton
; Programming Assignment 1
; Programming Languages
; Due February 25, 1987
;
; Four functions designed to manipulate sets after the
; fashion of algebraic Union, Intersection, and the slightly 
; different Difference and Equality.
; lists are used to represent sets
;
; Union combines all the elements of both sets into one set   
; without repeating any element.
;
(defun setunion (a b)
   (cond ((null a) b); if a is empty, then b is all there is
         ((member (car a) b) (setunion (cdr a) b)); else if element of
         ; a is same as element of b, then skip recursively  
         (t (cons (car a) (setunion (cdr a) b))))); else keep the
         ; element of a in resultant list
;
; Intersection is the combination of all mutual elements
; in both sets into one set, again without repeating. 
;
(defun setintersect (a b)
   (cond ((null a) nil); if a is empty, nil
         ((member (car a) b); if element in a is a member of b
          (cons (car a) (setintersect (cdr a) b))); then keep
         (t (setintersect (cdr a) b)))); else skip
;
; Difference is similar to the algebraic notation of A - B,
; any elements of B found in A is subracted from A, but not B
; in other words, B is not affected and a subset of A is created 
;
(defun setdiff (a b)
   (cond ((null a) nil); if a is empty, nil
         ((member (car a) b) (setdiff (cdr a) b)); if member, skip
         (t (cons (car a) (setdiff (cdr a) b))))); if not, keep
;
; Equality in two sets is defined as both sets having the same 
; elements regardless of order or number of said elements. 
;
(defun setequal (a b)
   (cond ((not (or (setdiff a b) (setdiff b a))) t); opposite of "and"
         (t nil))); if different sets, nil
;
; testing
(load "testbeck.txt")
;


1