| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
6.7.12.4 Removing Alist Entries
To remove the element from an association list whose key matches a
specified key, use assq-remove!, assv-remove! or
assoc-remove! (depending, as usual, on the level of equality
required between the key that you specify and the keys in the
association list).
As with assq-set! and friends, the specified alist may or may not
be modified destructively, and the only safe way to update a variable
containing the alist is to set! it to the value that
assq-remove! and friends return.
address-list
⇒
(("bob" . "11 Newington Avenue") ("mary" . "34 Elm Road")
("james" . "1a London Road"))
(set! address-list (assoc-remove! address-list "mary"))
address-list
⇒
(("bob" . "11 Newington Avenue") ("james" . "1a London Road"))
Note that, when assq/v/oc-remove! is used to modify an
association list that has been constructed only using the corresponding
assq/v/oc-set!, there can be at most one matching entry in the
alist, so the question of multiple entries being removed in one go does
not arise. If assq/v/oc-remove! is applied to an association
list that has been constructed using acons, or an
assq/v/oc-set! with a different level of equality, or any mixture
of these, it removes only the first matching entry from the alist, even
if the alist might contain further matching entries. For example:
(define address-list '())
(set! address-list (assq-set! address-list "mary" "11 Elm Street"))
(set! address-list (assq-set! address-list "mary" "57 Pine Drive"))
address-list
⇒
(("mary" . "57 Pine Drive") ("mary" . "11 Elm Street"))
(set! address-list (assoc-remove! address-list "mary"))
address-list
⇒
(("mary" . "11 Elm Street"))
In this example, the two instances of the string "mary" are not the same
when compared using eq?, so the two assq-set! calls add
two distinct entries to address-list. When compared using
equal?, both "mary"s in address-list are the same as the
"mary" in the assoc-remove! call, but assoc-remove! stops
after removing the first matching entry that it finds, and so one of the
"mary" entries is left in place.
- Scheme Procedure: assq-remove! alist key
- Scheme Procedure: assv-remove! alist key
- Scheme Procedure: assoc-remove! alist key
- C Function: scm_assq_remove_x (alist, key)
- C Function: scm_assv_remove_x (alist, key)
- C Function: scm_assoc_remove_x (alist, key)
Delete the first entry in alist associated with key, and return the resulting alist.
| [ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on April 20, 2013 using texi2html 5.0.
