Compile new lset.

This commit is contained in:
Dominik Pantůček 2023-07-07 12:50:14 +02:00
parent 04aa18d449
commit 684cc7d7f8
3 changed files with 77 additions and 1 deletions

View file

@ -56,7 +56,7 @@ HACKERBASE-OBJS=hackerbase.o testing.o listing.o cal-month.o \
util-utf8.o sgr-cell.o template-list-expander.o \
box-drawing.o util-list.o export-web-static.o util-dir.o \
dokuwiki.o racket-kwargs.o duck.o util-bst.o \
util-bst-bdict.o util-bst-ldict.o
util-bst-bdict.o util-bst-ldict.o util-bst-lset.o
GENDOC-SOURCES=gendoc.scm duck-extract.import.scm \
util-time.import.scm util-csv.import.scm util-git.import.scm \
@ -526,3 +526,10 @@ UTIL-BST-LDICT-SOURCES=util-bst-ldict.scm duck.import.scm \
util-bst-ldict.o: util-bst-ldict.import.scm
util-bst-ldict.import.scm: $(UTIL-BST-LDICT-SOURCES)
UTIL-BST-LSET-SOURCES=util-bst-lset.scm util-bst.import.scm \
racket-kwargs.import.scm util-bst-ldict.import.scm \
util-list.import.scm
util-bst-lset.o: util-bst-lset.import.scm
util-bst-lset.import.scm: $(UTIL-BST-LSET-SOURCES)

65
src/util-bst-lset.scm Normal file
View file

@ -0,0 +1,65 @@
(declare (unit util-bst-lset))
(import duck)
(module*
util-bst-lset
#:doc ("Reimplementation of old lset using new BST backend.")
(
make-lset
lset?
lset-empty?
lset-member?
lset-count
lset-add
lset-remove
list->lset
lset->list
lset-merge
lset-intersect
lset-subtract
lset=?
)
(import scheme
util-bst
racket-kwargs
util-bst-ldict
util-list)
(define* (make-lset (equality? equal?))
(make-bst 'lset equality? ldict<?))
(define lset? (bst? 'lset))
(define lset-empty? bst-empty?)
(define lset-member? bst-contains?)
(define lset-count bst-count)
(define (lset-add ls e)
(bst-set ls e #t))
(define lset-remove bst-remove)
(define* (list->lset lst (equality? equal?))
(foldl lset-add (make-lset equality?) lst))
(define lset->list bst-keys)
(define (lset=? ls1 ls2)
(bst-equal? ls1 ls2))
(define (lset-merge ls1 ls2)
(foldl lset-add ls1 (lset->list ls2)))
(define (lset-intersect ls1 ls2)
(list->lset
(filter (lambda (el)
(lset-member? ls2 el))
(lset->list ls1))
(bst-EQ? ls1)))
(define (lset-subtract ls1 ls2)
(foldl lset-remove ls1 (lset->list ls2)))
)

View file

@ -10,6 +10,10 @@
make-bst
bst?
bst-EQ?
bst-count
bst-empty?
bst-ref
bst-contains?