(declare (unit util-bst-ldict)) (import duck) (module* util-bst-ldict #:doc ("Reimplementation of old list-based symbol dictionary using new BST backend.") ( ldictstring a) (symbol->string b))))) (define (make-ldict . equality?/pairs) (let ((equality? (if (or (null? equality?/pairs) (not (procedure? (car equality?/pairs)))) eq? (car equality?/pairs))) (pairs (if (or (null? equality?/pairs) (procedure? (car equality?/pairs))) '() (car equality?/pairs)))) (let loop ((ld (make-bst 'ldict equality? ldict=? 2) proc)) (index? ((procedure-arity>=? 3) proc))) (bst-map-bst ld (lambda (k v) (let ((r (if both? (if index? (proc k v i) (proc k v)) (proc v)))) (set! i (add1 i)) r))))) (define (ldict-filter pred? ld) (bst-filter ld pred?)) (define (ldict-reduce init proc ld) (bst-reduce ld proc init)) (define ldict-equal? bst-equal?) )