You are looking at historical revision 39572 of this page. It may differ significantly from its current revision.
Outdated egg!
This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for the CHICKEN 5 version of this egg, if it exists.
If it does not exist, there may be equivalent functionality provided by another egg; have a look at the egg index. Otherwise, please consider porting this egg to the current version of CHICKEN.
alist-lib
SRFI-69-like library 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!
[syntax] (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-syntax
alist-set!
(lambda (expression rename compare)
(match expression
((_ variable key value)
(let ((%if (rename 'if))
(%null? (rename 'null?))
(%set! (rename 'set!))
(%list (rename 'list))
(%cons (rename 'cons))
(%alist-prepend! (rename 'alist-prepend!)))
`(,%if
(,%null? ,variable)
(,%set! ,variable (,%list (,%cons ,key ,value)))
(,%alist-prepend! ,variable ,key ,value)))))))
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, value, accumulatum.
- alist
- The alist to fold
- f
- The function to apply to key, value, accumulatum
- init
- The seed of the fold
(define (alist-fold alist f init)
(fold (lambda (association accumulatum)
(match association ((key . value) (f key value accumulatum))))
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
Repository
https://github.com/klutometis/alist-lib
License
BSD
Dependencies
Versions
- 0.1
- Version 0.1
- 0.1.1
- Version 0.1.1
- 0.1.2
- Meta fixes
- 0.1.3
- More meta
- 0.1.4
- Housekeeping
- 0.2.1
- Change to BSD.
- 0.2.2
- Remove debug
- 0.2.3
- Add docs.
- 0.2.4
- Failure condition
- 0.2.5
- With a note about cock-utils
- 0.2.6
- Add test-exit.
- 0.2.7
- alist-set! should work on empty lists.
- 0.2.8
- Remove the dependency on setup-helper-cock.
- 0.2.9
- Remove the dependency on debug.
- 0.2.10
- Use hahn.
Colophon
Documented by hahn.