;; Library: simple implementation of sets. ;; Put this in the same directory as "lc.scm". (module sets mzscheme (provide empty-set singleton-set set-union set-minus is-in-set?) (define empty-set (make-hash-table)) (define (singleton-set v) (let ([h (make-hash-table)]) (hash-table-put! h v #t) h)) (define (set-union s1 s2) (let ([h (hash-table-copy s1)]) (hash-table-for-each s2 (lambda (k v) (hash-table-put! h k #t))) h)) (define (set-minus s1 x) (if (hash-table-get s1 x (lambda () #f)) (let ([h (hash-table-copy s1)]) (hash-table-remove! h x) h) s1)) (define (is-in-set? x s1) (hash-table-get s1 x (lambda () #f))))