From b75b06cee5e46c240dbb9f37ccfc36019ddd5fd2 Mon Sep 17 00:00:00 2001 From: Scott Owens Date: Fri, 21 Jan 2005 04:35:58 +0000 Subject: [PATCH] *** empty log message *** original commit: cd346fcfcf19895095b933ff4663bd06e00fd0b1 --- collects/mzlib/integer-set.ss | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/collects/mzlib/integer-set.ss b/collects/mzlib/integer-set.ss index ca33726..649f0c8 100644 --- a/collects/mzlib/integer-set.ss +++ b/collects/mzlib/integer-set.ss @@ -201,9 +201,25 @@ ;; split : integer-set integer-set -> integer-set integer-set integer-set ;; returns (s1 intersect s2), s1 - (s1 intersect s2) and s2 - (s1 intersect s2) + ;; Of course, s1 - (s1 intersect s2) = s1 intersect (complement s2) = s1 - s2 (define (split s1 s2) (split-acc (integer-set-contents s1) (integer-set-contents s2) null null null)) - + + ;; intersect: integer-set integer-set -> integer-set + (define (intersect s1 s2) + (let-values (((i s1-s2 s2-s1) (split s1 s2))) + i)) + + ;; difference: integer-set integer-set -> integer-set + (define (difference s1 s2) + (let-values (((i s1-s2 s2-s1) (split s1 s2))) + s1-s2)) + + ;; xor: integer-set integer-set -> integer-set + (define (xor s1 s2) + (let-values (((i s1-s2 s2-s1) (split s1 s2))) + (merge s1-s2 s2-s1))) + (test-block ((s (lambda (s1 s2) (map integer-set-contents (call-with-values (lambda () (split (make-integer-set s1) @@ -420,6 +436,9 @@ (((i int) (j (and/c int (>=/c i)))) . ->r . integer-set?))) (rename merge union (integer-set? integer-set? . -> . integer-set?)) (split (integer-set? integer-set? . -> . (values integer-set? integer-set? integer-set?))) + (intersect (integer-set? integer-set? . -> . integer-set?)) + (difference (integer-set? integer-set? . -> . integer-set?)) + (xor (integer-set? integer-set? . -> . integer-set?)) (complement (((s integer-set?) (min int) (max (and/c int (>=/c min)))) . ->r . integer-set?)) (member? (int integer-set? . -> . any)) (get-integer (integer-set? . -> . (union false/c int)))