diff options
author | Peter Bex <peter@more-magic.net> | 2025-08-15 11:27:11 +0200 |
---|---|---|
committer | Peter Bex <peter@more-magic.net> | 2025-08-18 13:39:32 +0200 |
commit | d3a425a4930fa4395246179ad0af504c783922fd (patch) | |
tree | 0d4a06282c7a6d819ad8b5d94e84290dbb028804 /slsets.scm | |
parent | fa8d354bc49b0adc77e6dd6d973c8bd2d33f2769 (diff) | |
download | slset-d3a425a4930fa4395246179ad0af504c783922fd.tar.gz |
Add slset-delete and slset-contains?
Not strictly needed, but could be helpful and completes the
operations. Also, if we ever reimplement it using some other
strategy, this might be more useful.
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)))) + ) |