Copyright (C) 2000-2012 |
GNU Info (guile.info)Removing Alist EntriesRemoving 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. - primitive: assq-remove! alist key - primitive: assv-remove! alist key - primitive: assoc-remove! alist key Delete the first entry in ALIST associated with KEY, and return the resulting alist. automatically generated by info2www version 1.2.2.9 |