From d3a425a4930fa4395246179ad0af504c783922fd Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Fri, 15 Aug 2025 11:27:11 +0200 Subject: 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. --- slsets.scm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) (limited to 'slsets.scm') 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)))) + ) -- cgit v1.2.3