| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
A list can represent an unordered mathematical set—simply consider a value
an element of a set if it appears in the list, and ignore the order of the
list. To form the union of two sets, use append (as long as you
don't mind having duplicate elements). You can remove equal
duplicates using delete-dups. Other useful functions for sets
include memq and delq, and their equal versions,
member and delete.
Common Lisp note: Common Lisp has functions
union(which avoids duplicate elements) andintersectionfor set operations, but GNU Emacs Lisp does not have them. You can write them in Lisp if you wish.
This function tests to see whether object is a member of list.
If it is, memq returns a list starting with the first occurrence of
object. Otherwise, it returns nil. The letter ‘q’ in
memq says that it uses eq to compare object against the
elements of the list. For example:
(memq 'b '(a b c b a))
⇒ (b c b a)
(memq '(2) '((1) (2))) ; |
This function destructively removes all elements eq to object
from list. The letter ‘q’ in delq says that it uses
eq to compare object against the elements of the list, like
memq and remq.
When delq deletes elements from the front of the list, it does so
simply by advancing down the list and returning a sublist that starts after
those elements:
(delq 'a '(a b c)) ≡ (cdr '(a b c)) |
When an element to be deleted appears in the middle of the list, removing it involves changing the CDRs (voir la section Altering the CDR of a List).
(setq sample-list '(a b c (4)))
⇒ (a b c (4))
(delq 'a sample-list)
⇒ (b c (4))
sample-list
⇒ (a b c (4))
(delq 'c sample-list)
⇒ (a b (4))
sample-list
⇒ (a b (4))
|
Note that (delq 'c sample-list) modifies sample-list to splice
out the third element, but (delq 'a sample-list) does not splice
anything—it just returns a shorter list. Don't assume that a variable
which formerly held the argument list now has fewer elements, or that
it still holds the original list! Instead, save the result of delq
and use that. Most often we store the result back into the variable that
held the original list:
(setq flowers (delq 'rose flowers)) |
In the following example, the (4) that delq attempts to match
and the (4) in the sample-list are not eq:
(delq '(4) sample-list)
⇒ (a c (4))
If you want to delete elements that are |
This function returns a copy of list, with all elements removed which
are eq to object. The letter ‘q’ in remq says that
it uses eq to compare object against the elements of
list.
(setq sample-list '(a b c a b c))
⇒ (a b c a b c)
(remq 'a sample-list)
⇒ (b c b c)
sample-list
⇒ (a b c a b c)
|
The function memql tests to see whether object is a member of
list, comparing members with object using eql, so
floating point elements are compared by value. If object is a member,
memql returns a list starting with its first occurrence in
list. Otherwise, it returns nil.
Compare this with memq:
(memql 1.2 '(1.1 1.2 1.3)) ; |
The following three functions are like memq, delq and
remq, but use equal rather than eq to compare
elements. Voir la section Equality Predicates.
The function member tests to see whether object is a member of
list, comparing members with object using equal. If
object is a member, member returns a list starting with its
first occurrence in list. Otherwise, it returns nil.
Compare this with memq:
(member '(2) '((1) (2))) ; |
If sequence is a list, this function destructively removes all
elements equal to object from sequence. For lists,
delete is to delq as member is to memq: it uses
equal to compare elements with object, like member; when
it finds an element that matches, it cuts the element out just as
delq would.
If sequence is a vector or string, delete returns a copy of
sequence with all elements equal to object removed.
For example:
(setq l '((2) (1) (2)))
(delete '(2) l)
⇒ ((1))
l
⇒ ((2) (1))
;; If you want to change |
This function is the non-destructive counterpart of delete. It
returns a copy of sequence, a list, vector, or string, with elements
equal to object removed. For example:
(remove '(2) '((2) (1) (2)))
⇒ ((1))
(remove '(2) [(2) (1) (2)])
⇒ [(1)]
|
Common Lisp note: The functions
member,deleteandremovein GNU Emacs Lisp are derived from Maclisp, not Common Lisp. The Common Lisp versions do not useequalto compare elements.
This function is like member, except that object should be a
string and that it ignores differences in letter-case and text
representation: upper-case and lower-case letters are treated as equal, and
unibyte strings are converted to multibyte prior to comparison.
This function destructively removes all equal duplicates from
list, stores the result in list and returns it. Of several
equal occurrences of an element in list, delete-dups
keeps the first one.
See also the function add-to-list, in Modifying List Variables, for a way
to add an element to a list stored in a variable and used as a set.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Top] | [Table des matières] | [Index] | [ ? ] |
Ce document a été généré par Eric Reinbold le 13 Octobre 2007 en utilisant texi2html 1.78.