summaryrefslogtreecommitdiff
path: root/slsets.scm
diff options
context:
space:
mode:
Diffstat (limited to 'slsets.scm')
-rw-r--r--slsets.scm16
1 files changed, 14 insertions, 2 deletions
diff --git a/slsets.scm b/slsets.scm
index 8f5469c..9b93676 100644
--- a/slsets.scm
+++ b/slsets.scm
@@ -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))))
+
)