You are looking at historical revision 27577 of this page. It may differ significantly from its current revision.
alist-lib
Useful functions for alists
alist-values
[procedure] (alist-values alist) → listExtract the associations from an alist.
- alist
- The alist from which to extract
(define (alist-values alist) (map cdr alist))
alist-keys
[procedure] (alist-keys alist) → listExtract the keys from an alist.
- alist
- The alist from which to extract
(define (alist-keys alist) (map car alist))
alist-map
[procedure] (alist-map f alist) → listMap across an alist; f takes two parameters: key and values.
- f
- The function to apply to each key-value association
- alist
- The alist to apply to
(define (alist-map f alist)
(map (match-lambda ((key . values) (f key values))) alist))
alist-set!
[procedure] (alist-set! alist key value) → unspecifiedDestructively set a key-value association.
- alist
- The alist in which to set
- key
- The key to set
- value
- The value to associate with the key
(define alist-set! alist-prepend!)
alist-update!
[procedure] (alist-update! alist key function) → unspecified[procedure] (alist-update! alist key function thunk) → unspecified
[procedure] (alist-update! alist key function thunk =) → unspecified
On analogy with hash-table-update!, descructively update an association.
- alist
- The alist to update
- key
- The key associated with the update
- f
- A monadic function taking the preëxisting key
- thunk
- The thunk to apply if no association exists
- =
- The equality predicate for keys
(define alist-update!
(case-lambda
((alist key function)
(alist-update!
alist
key
function
(lambda () (error "Key not found -- ALIST-UPDATE!" key))))
((alist key function thunk) (alist-update! alist key function thunk eqv?))
((alist key function thunk =)
(let ((pair (assoc key alist =)))
(if pair
(set-cdr! pair (function (cdr pair)))
(alist-set! alist key (function (thunk))))))))
alist-update!/default
[procedure] (alist-update!/default alist key function default) → unspecified[procedure] (alist-update!/default alist key function default =) → unspecified
On analogy with hash-table-update!, descructively update an association.
- alist
- The alist to update
- key
- The key associated with the update
- f
- A monadic function taking the preëxisting key
- default
- The default value if no association exists
- =
- The equality predicate for keys
(define alist-update!/default
(case-lambda
((alist key function default)
(alist-update!/default alist key function default eqv?))
((alist key function default =)
(alist-update! alist key function (lambda () default)))))
alist-ref
[procedure] (alist-ref alist key) → object[procedure] (alist-ref alist key thunk) → object
[procedure] (alist-ref alist key thunk =) → object
Return a value associated with its key or apply thunk.
- alist
- The alist to search in
- key
- The key whose value to return
- thunk
- The thunk to apply when association doesn't exist (default is to err)
- =
- The equality predicate to apply to keys
(define alist-ref
(case-lambda
((alist key)
(alist-ref
alist
key
(lambda () (error "Key not found -- ALIST-REF" key))))
((alist key thunk) (alist-ref alist key thunk eqv?))
((alist key thunk =)
(let ((value (assoc key alist =))) (if value (cdr value) (thunk))))))
alist-ref/default
[procedure] (alist-ref/default alist key default) → object[procedure] (alist-ref/default alist key default =) → object
Return a value associated with its key or default.
- alist
- The alist to search in
- key
- The key whose value to return
- default
- The default to return when association doesn't exist
- =
- The equality predicate to apply to keys
(define alist-ref/default
(case-lambda
((alist key default) (alist-ref alist key (lambda () default)))
((alist key default =) (alist-ref alist key (lambda () default) =))))
alist-size
[procedure] (alist-size alist) → integerCalculate size of alist.
- alist
- The alist whose size to calculate
(define alist-size length)
alist-fold
[procedure] (alist-fold alist f init) → objectFold an alist; whose f takes key, accumulatum, value.
- alist
- The alist to fold
- f
- The function to apply to key, accumulatum, value
- init
- The seed of the fold
(define (alist-fold alist f init)
(fold (lambda (association accumulatum)
(match association ((key . value) (f key accumulatum value))))
init
alist))
alist-set
[procedure] (alist-set alist key value) → alistNon-destructively associate a key and value in the alist.
- alist
- Alist in which to set
- key
- The key to set
- value
- The value to associate with key
(define (alist-set alist key value) (alist-cons key value alist))
About this egg
Author
Colophon
Documented by cock.