Compile new lset.
This commit is contained in:
parent
04aa18d449
commit
684cc7d7f8
3 changed files with 77 additions and 1 deletions
|
@ -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
65
src/util-bst-lset.scm
Normal 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)))
|
||||
|
||||
)
|
|
@ -10,6 +10,10 @@
|
|||
make-bst
|
||||
bst?
|
||||
|
||||
bst-EQ?
|
||||
|
||||
bst-count
|
||||
|
||||
bst-empty?
|
||||
bst-ref
|
||||
bst-contains?
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue