1 Scapegoat Trees
(require scapegoat-tree) | package: scapegoat-tree |
1.1 Introduction
This module provides a dictionary type implemented using scapegoat trees.
A scapegoat tree implements the gen:dict and gen:ordered-dict interfaces. Trees are immutable; side-effect versions of functions update a pointer to the root of the tree as a convienence.
1.2 Dictionary Interface
In addition to the dict? and ordered-dict? APIs, scapegoat trees support the following functions.
1.2.1 Parameters
parameter
(scapegoat-tree-height-factor) → (and/c (>/c 0.5) (</c 1))
(scapegoat-tree-height-factor factor) → void? factor : (and/c (>/c 0.5) (</c 1))
= 2/3
parameter
(scapegoat-tree-rebalance-on-copy rebalance?) → void? rebalance? : boolean?
= #t
1.2.2 Predicates
procedure
(scapegoat-tree? obj) → boolean?
obj : any/c
procedure
(scapegoat-tree-iterator? obj) → boolean?
obj : any/c
1.2.3 Constructors
procedure
(make-scapegoat-tree [ order #:key-contract key-contract #:value-contract value-contract]) → scapegoat-tree? order : order? = datum-order key-contract : contract? = (order-datum-contract order) value-contract : contract? = any/c
procedure
s : scapegoat-tree?
procedure
s : scapegoat-tree?
syntax
(for/scapegoat-tree [#:order order order? order-datum] [#:key-contract key-contract contract? (order-datum-contract order)] [#:value-contract value-contract contract? any/c] (sequence-binding ...) body ...)
A "for" comprehension that returns a scapegoat tree with the optionally provided order and contracts. The body should return two values, used as the key and value to be inserted into the returned scapegoat tree. Later keys overrwrite earlier duplicates.
}
syntax
(for*/scapegoat-tree [#:order order order? order-datum] [#:key-contract key-contract contract? (order-datum-contract order)] [#:value-contract value-contract contract? any/c] (sequence-binding ...) body ...)
A "for*" comprehension that returns a scapegoat tree with the optionally provided order and contracts. The body should return two values, used as the key and value to be inserted into the returned scapegoat tree. Later keys overrwrite earlier duplicates.
}
1.2.4 Queries
procedure
(scapegoat-tree-order s) → order?
s : scapegoat-tree?
procedure
s : scapegoat-tree?
procedure
s : scapegoat-tree?
procedure
s : scapegoat-tree?
procedure
s : scapegoat-tree?
procedure
(scapegoat-tree-ref s key [default]) → any
s : scapegoat-tree? key : any/c
default : any/c = (lambda () (error "key not found\n key: " key))
1.2.4.1 Iterators
procedure
→ (or/c scapegoat-tree-iterator? #f) s : scapegoat-tree?
Returns #f if the tree is empty.
procedure
→ (or/c scapegoat-tree-iterator? #f) s : scapegoat-tree? i : scapegoat-tree-iterator?
procedure
(scapegoat-tree-iterate-key s i) → any
s : scapegoat-tree? i : scapegoat-tree-iterator?
procedure
(scapegoat-tree-iterate-value s i) → any
s : scapegoat-tree? i : scapegoat-tree-iterator?
procedure
(scapegoat-tree-iterator->list s i) → list?
s : scapegoat-tree? i : scapegoat-tree-iterator?
procedure
s : scapegoat-tree? i : scapegoat-tree-iterator?
procedure
s : scapegoat-tree? i : scapegoat-tree-iterator?
1.2.5 Mutators
procedure
(scapegoat-tree-set s key value) → scapegoat-tree?
s : scapegoat-tree? key : any/c value : any/c
procedure
(scapegoat-tree-set! s key value) → any
s : scapegoat-tree? key : any/c value : any/c
procedure
(scapegoat-tree-delete s key) → scapegoat-tree?
s : scapegoat-tree? key : any/c
procedure
(scapegoat-tree-delete! s key) → any
s : scapegoat-tree? key : any/c