DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(guile.info.gz) Removing Alist Entries

Info Catalog (guile.info.gz) Retrieving Alist Entries (guile.info.gz) Association Lists (guile.info.gz) Sloppy Alist Functions
 
 22.7.2.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.
 
Info Catalog (guile.info.gz) Retrieving Alist Entries (guile.info.gz) Association Lists (guile.info.gz) Sloppy Alist Functions
automatically generated byinfo2html