diff options
Diffstat (limited to 'slsets.scm')
-rw-r--r-- | slsets.scm | 16 |
1 files changed, 14 insertions, 2 deletions
@@ -9,11 +9,12 @@ (declare (disable-interrupts)) (module slsets - (slset<= slset= slset-adjoin ;; TODO: slset-delete and slset-contains? + (slset<= slset= slset-adjoin slset-difference slset-intersection slset-difference+intersection slset-union slset-xor - slset-deduplicate) + slset-deduplicate + slset-delete slset-contains?) (import scheme (chicken base) (chicken plist)) @@ -159,4 +160,15 @@ (else (mark! x marking) (lp (cdr lst) (cons x res))))))))) +;; These are not really necessary - one can use memq and srfi-1's delete. +;; But they're supplied so we have the full gamut of set operations. +;; Also, deletion is a bit more ergonomic as it accepts multiple arguments. +(define (slset-contains? slset el) + (and (memq el slset) #t)) + +(define (slset-delete slset . els) + (with-marked-list els + (lambda (m) + (filter (lambda (x) (not (marked? x m))) slset)))) + ) |