4.15 Keysets
(require rebellion/collection/keyset) | package: rebellion |
A keyset is a data structure representing an immutable sorted set of keywords. Keysets can be more efficient than generic sorted set implementations. For example, the keyset constructor is a macro that sorts the keywords at compile-time.
syntax
(keyset keyword ...)
> (keyset #:banana #:orange #:apple #:grape) (keyset #:apple #:banana #:grape #:orange)
> (keyset #:orange #:banana #:banana) (keyset #:banana #:orange)
value
empty-keyset : keyset? = (keyset)
procedure
(keyset-contains? keys kw) → boolean?
keys : keyset? kw : keyword?
> (define fruits (keyset #:banana #:orange #:apple #:grape)) > (keyset-contains? fruits '#:orange) #t
> (keyset-contains? fruits '#:walnut) #f
procedure
(keyset-index-of keys kw) → natural?
keys : keyset? kw : keyword?
> (define fruits (keyset #:banana #:orange #:apple #:grape)) > (keyset-index-of fruits '#:grape) 2
> (keyset-index-of fruits '#:banana) 1
procedure
(keyset-ref keys pos) → keyword?
keys : keyset? pos : natural?
> (define fruits (keyset #:banana #:orange #:apple #:grape)) > (keyset-ref fruits 0) '#:apple
> (keyset-ref fruits 3) '#:orange
procedure
(keyset-size keys) → natural?
keys : keyset?
> (define fruits (keyset #:banana #:orange #:apple #:grape)) > (keyset-size fruits) 4
procedure
(keyset-add keys kw) → keyset?
keys : keyset? kw : keyword?
> (define fruits (keyset #:banana #:orange #:apple #:grape)) > (keyset-add fruits '#:peach) (keyset #:apple #:banana #:grape #:orange #:peach)
procedure
(keyset-remove keys kw) → keyset?
keys : keyset? kw : keyword?
> (define fruits (keyset #:banana #:orange #:apple #:grape)) > (keyset-remove fruits '#:banana) (keyset #:apple #:grape #:orange)
procedure
(in-keyset keys) → (sequence/c keyword?)
keys : keyset?
> (define fruits (keyset #:banana #:orange #:apple #:grape))
> (for/set ([kw (in-keyset fruits)]) (keyword->immutable-string kw)) (set "banana" "apple" "grape" "orange")
value
> (reduce into-keyset '#:apple '#:orange '#:banana) (keyset #:apple #:banana #:orange)
syntax
(for/keyset (for-clause ...) body-or-break ... body)
body : keyword?
> (for/keyset ([str (in-list (list "hello" "darkness" "my" "old" "friend"))]) (string->keyword str)) (keyset #:darkness #:friend #:hello #:my #:old)
syntax
(for*/keyset (for-clause ...) body-or-break ... body)
body : keyword?
> (for*/keyset ([str (in-list (list "hello" "darkness" "my" "old" "friend"))]) (string->keyword str)) (keyset #:darkness #:friend #:hello #:my #:old)
procedure
(keyset->list keys) → (listof keyword?)
keys : keyset?
> (define greek-gods (keyset #:zeus #:hera #:hades #:athena #:poseidon)) > (keyset->list greek-gods) '(#:athena #:hades #:hera #:poseidon #:zeus)
procedure
(list->keyset kws) → keyset?
kws : (listof keyword?)
> (list->keyset (list '#:banana '#:orange '#:orange '#:apple '#:grape)) (keyset #:apple #:banana #:grape #:orange)
procedure
(keyset->set keys) → (set/c keyword?)
keys : keyset?
> (keyset->set (keyset #:red #:blue #:green #:yellow)) (set '#:blue '#:red '#:green '#:yellow)
procedure
(set->keyset kw-set) → keyset?
kw-set : (set/c keyword?)
> (set->keyset (set '#:red '#:blue '#:green '#:yellow)) (keyset #:blue #:green #:red #:yellow)