(Hash Tables): Add desc to menu items.
[bpt/emacs.git] / lispref / lists.texi
CommitLineData
73804d4b
RS
1@c -*-texinfo-*-
2@c This is part of the GNU Emacs Lisp Reference Manual.
7baeca0c
LT
3@c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999,
4@c 2003, 2004
177c0ea7 5@c Free Software Foundation, Inc.
73804d4b
RS
6@c See the file elisp.texi for copying conditions.
7@setfilename ../info/lists
8@node Lists, Sequences Arrays Vectors, Strings and Characters, Top
9@chapter Lists
10@cindex list
11@cindex element (of list)
12
13 A @dfn{list} represents a sequence of zero or more elements (which may
14be any Lisp objects). The important difference between lists and
15vectors is that two or more lists can share part of their structure; in
16addition, you can insert or delete elements in a list without copying
17the whole list.
18
19@menu
20* Cons Cells:: How lists are made out of cons cells.
21* Lists as Boxes:: Graphical notation to explain lists.
22* List-related Predicates:: Is this object a list? Comparing two lists.
23* List Elements:: Extracting the pieces of a list.
24* Building Lists:: Creating list structure.
25* Modifying Lists:: Storing new pieces into an existing list.
26* Sets And Lists:: A list can represent a finite mathematical set.
27* Association Lists:: A list can represent a finite relation or mapping.
28@end menu
29
30@node Cons Cells
31@section Lists and Cons Cells
32@cindex lists and cons cells
33@cindex @code{nil} and lists
34
35 Lists in Lisp are not a primitive data type; they are built up from
2b3fc6c3 36@dfn{cons cells}. A cons cell is a data object that represents an
3998eed0
RS
37ordered pair. That is, it has two slots, and each slot @dfn{holds}, or
38@dfn{refers to}, some Lisp object. One slot is known as the @sc{car},
39and the other is known as the @sc{cdr}. (These names are traditional;
40see @ref{Cons Cell Type}.) @sc{cdr} is pronounced ``could-er.''
73804d4b 41
3998eed0
RS
42 We say that ``the @sc{car} of this cons cell is'' whatever object
43its @sc{car} slot currently holds, and likewise for the @sc{cdr}.
44
45 A list is a series of cons cells ``chained together,'' so that each
05aea714 46cell refers to the next one. There is one cons cell for each element of
3998eed0
RS
47the list. By convention, the @sc{car}s of the cons cells hold the
48elements of the list, and the @sc{cdr}s are used to chain the list: the
49@sc{cdr} slot of each cons cell refers to the following cons cell. The
50@sc{cdr} of the last cons cell is @code{nil}. This asymmetry between
51the @sc{car} and the @sc{cdr} is entirely a matter of convention; at the
73804d4b
RS
52level of cons cells, the @sc{car} and @sc{cdr} slots have the same
53characteristics.
54
d6702947
RS
55@cindex true list
56 Since @code{nil} is the conventional value to put in the @sc{cdr} of
57the last cons cell in the list, we call that case a @dfn{true list}.
58
59 In Lisp, we consider the symbol @code{nil} a list as well as a
60symbol; it is the list with no elements. For convenience, the symbol
61@code{nil} is considered to have @code{nil} as its @sc{cdr} (and also
62as its @sc{car}). Therefore, the @sc{cdr} of a true list is always a
63true list.
64
65@cindex dotted list
66@cindex circular list
67 If the @sc{cdr} of a list's last cons cell is some other value,
68neither @code{nil} nor another cons cell, we call the structure a
69@dfn{dotted list}, since its printed representation would use
70@samp{.}. There is one other possibility: some cons cell's @sc{cdr}
71could point to one of the previous cons cells in the list. We call
72that structure a @dfn{circular list}.
73
74 For some purposes, it does not matter whether a list is true,
75circular or dotted. If the program doesn't look far enough down the
76list to see the @sc{cdr} of the final cons cell, it won't care.
77However, some functions that operate on lists demand true lists and
78signal errors if given a dotted list. Most functions that try to find
79the end of a list enter infinite loops if given a circular list.
80
2b3fc6c3
RS
81@cindex list structure
82 Because most cons cells are used as part of lists, the phrase
83@dfn{list structure} has come to mean any structure made out of cons
84cells.
85
73804d4b
RS
86 The @sc{cdr} of any nonempty list @var{l} is a list containing all the
87elements of @var{l} except the first.
88
89@node Lists as Boxes
90@comment node-name, next, previous, up
91@section Lists as Linked Pairs of Boxes
92@cindex box representation for lists
93@cindex lists represented as boxes
94@cindex cons cell as box
95
96 A cons cell can be illustrated as a pair of boxes. The first box
97represents the @sc{car} and the second box represents the @sc{cdr}.
98Here is an illustration of the two-element list, @code{(tulip lily)},
99made from two cons cells:
100
101@example
102@group
103 --------------- ---------------
104| car | cdr | | car | cdr |
105| tulip | o---------->| lily | nil |
106| | | | | |
107 --------------- ---------------
108@end group
109@end example
110
111 Each pair of boxes represents a cons cell. Each box ``refers to'',
b6954afd 112``points to'' or ``holds'' a Lisp object. (These terms are
74490e55
RS
113synonymous.) The first box, which describes the @sc{car} of the first
114cons cell, contains the symbol @code{tulip}. The arrow from the
115@sc{cdr} box of the first cons cell to the second cons cell indicates
116that the @sc{cdr} of the first cons cell is the second cons cell.
73804d4b
RS
117
118 The same list can be illustrated in a different sort of box notation
119like this:
120
121@example
122@group
969fe9b5
RS
123 --- --- --- ---
124 | | |--> | | |--> nil
125 --- --- --- ---
73804d4b
RS
126 | |
127 | |
128 --> tulip --> lily
129@end group
130@end example
131
132 Here is a more complex illustration, showing the three-element list,
133@code{((pine needles) oak maple)}, the first element of which is a
134two-element list:
135
136@example
137@group
969fe9b5
RS
138 --- --- --- --- --- ---
139 | | |--> | | |--> | | |--> nil
140 --- --- --- --- --- ---
73804d4b
RS
141 | | |
142 | | |
143 | --> oak --> maple
144 |
969fe9b5
RS
145 | --- --- --- ---
146 --> | | |--> | | |--> nil
147 --- --- --- ---
73804d4b
RS
148 | |
149 | |
150 --> pine --> needles
151@end group
152@end example
153
154 The same list represented in the first box notation looks like this:
155
156@example
157@group
158 -------------- -------------- --------------
159| car | cdr | | car | cdr | | car | cdr |
160| o | o------->| oak | o------->| maple | nil |
161| | | | | | | | | |
162 -- | --------- -------------- --------------
163 |
164 |
165 | -------------- ----------------
166 | | car | cdr | | car | cdr |
167 ------>| pine | o------->| needles | nil |
168 | | | | | |
169 -------------- ----------------
170@end group
171@end example
172
2b3fc6c3
RS
173 @xref{Cons Cell Type}, for the read and print syntax of cons cells and
174lists, and for more ``box and arrow'' illustrations of lists.
73804d4b
RS
175
176@node List-related Predicates
177@section Predicates on Lists
178
179 The following predicates test whether a Lisp object is an atom, is a
180cons cell or is a list, or whether it is the distinguished object
181@code{nil}. (Many of these predicates can be defined in terms of the
182others, but they are used so often that it is worth having all of them.)
183
184@defun consp object
185This function returns @code{t} if @var{object} is a cons cell, @code{nil}
186otherwise. @code{nil} is not a cons cell, although it @emph{is} a list.
187@end defun
188
189@defun atom object
190@cindex atoms
191This function returns @code{t} if @var{object} is an atom, @code{nil}
192otherwise. All objects except cons cells are atoms. The symbol
193@code{nil} is an atom and is also a list; it is the only Lisp object
2b3fc6c3 194that is both.
73804d4b
RS
195
196@example
197(atom @var{object}) @equiv{} (not (consp @var{object}))
198@end example
199@end defun
200
201@defun listp object
202This function returns @code{t} if @var{object} is a cons cell or
203@code{nil}. Otherwise, it returns @code{nil}.
204
205@example
206@group
207(listp '(1))
208 @result{} t
209@end group
210@group
211(listp '())
212 @result{} t
213@end group
214@end example
215@end defun
216
217@defun nlistp object
218This function is the opposite of @code{listp}: it returns @code{t} if
219@var{object} is not a list. Otherwise, it returns @code{nil}.
220
221@example
222(listp @var{object}) @equiv{} (not (nlistp @var{object}))
223@end example
224@end defun
225
226@defun null object
227This function returns @code{t} if @var{object} is @code{nil}, and
228returns @code{nil} otherwise. This function is identical to @code{not},
229but as a matter of clarity we use @code{null} when @var{object} is
230considered a list and @code{not} when it is considered a truth value
231(see @code{not} in @ref{Combining Conditions}).
232
233@example
234@group
235(null '(1))
236 @result{} nil
237@end group
238@group
239(null '())
240 @result{} t
241@end group
242@end example
243@end defun
244
ec221d13 245@need 2000
73804d4b
RS
246
247@node List Elements
248@section Accessing Elements of Lists
249@cindex list elements
250
251@defun car cons-cell
b6954afd 252This function returns the value referred to by the first slot of the
73804d4b
RS
253cons cell @var{cons-cell}. Expressed another way, this function
254returns the @sc{car} of @var{cons-cell}.
255
256As a special case, if @var{cons-cell} is @code{nil}, then @code{car}
257is defined to return @code{nil}; therefore, any list is a valid argument
258for @code{car}. An error is signaled if the argument is not a cons cell
259or @code{nil}.
260
261@example
262@group
263(car '(a b c))
264 @result{} a
265@end group
266@group
267(car '())
268 @result{} nil
269@end group
270@end example
271@end defun
272
273@defun cdr cons-cell
b6954afd 274This function returns the value referred to by the second slot of
73804d4b
RS
275the cons cell @var{cons-cell}. Expressed another way, this function
276returns the @sc{cdr} of @var{cons-cell}.
277
278As a special case, if @var{cons-cell} is @code{nil}, then @code{cdr}
279is defined to return @code{nil}; therefore, any list is a valid argument
280for @code{cdr}. An error is signaled if the argument is not a cons cell
281or @code{nil}.
282
283@example
284@group
285(cdr '(a b c))
286 @result{} (b c)
287@end group
288@group
289(cdr '())
290 @result{} nil
291@end group
292@end example
293@end defun
294
295@defun car-safe object
296This function lets you take the @sc{car} of a cons cell while avoiding
297errors for other data types. It returns the @sc{car} of @var{object} if
298@var{object} is a cons cell, @code{nil} otherwise. This is in contrast
299to @code{car}, which signals an error if @var{object} is not a list.
300
301@example
302@group
303(car-safe @var{object})
304@equiv{}
305(let ((x @var{object}))
306 (if (consp x)
307 (car x)
308 nil))
309@end group
310@end example
311@end defun
312
313@defun cdr-safe object
314This function lets you take the @sc{cdr} of a cons cell while
315avoiding errors for other data types. It returns the @sc{cdr} of
316@var{object} if @var{object} is a cons cell, @code{nil} otherwise.
317This is in contrast to @code{cdr}, which signals an error if
318@var{object} is not a list.
319
320@example
321@group
322(cdr-safe @var{object})
323@equiv{}
324(let ((x @var{object}))
325 (if (consp x)
326 (cdr x)
327 nil))
328@end group
329@end example
330@end defun
331
8241495d
RS
332@tindex pop
333@defmac pop listname
334This macro is a way of examining the @sc{car} of a list,
335and taking it off the list, all at once. It is new in Emacs 21.
336
337It operates on the list which is stored in the symbol @var{listname}.
338It removes this element from the list by setting @var{listname}
339to the @sc{cdr} of its old value---but it also returns the @sc{car}
340of that list, which is the element being removed.
341
342@example
343x
344 @result{} (a b c)
345(pop x)
346 @result{} a
347x
348 @result{} (b c)
349@end example
350@end defmac
351
73804d4b 352@defun nth n list
7baeca0c 353@anchor{Definition of nth}
73804d4b
RS
354This function returns the @var{n}th element of @var{list}. Elements
355are numbered starting with zero, so the @sc{car} of @var{list} is
356element number zero. If the length of @var{list} is @var{n} or less,
357the value is @code{nil}.
358
359If @var{n} is negative, @code{nth} returns the first element of
360@var{list}.
361
362@example
363@group
364(nth 2 '(1 2 3 4))
365 @result{} 3
366@end group
367@group
368(nth 10 '(1 2 3 4))
369 @result{} nil
370@end group
371@group
372(nth -3 '(1 2 3 4))
373 @result{} 1
374
375(nth n x) @equiv{} (car (nthcdr n x))
376@end group
377@end example
969fe9b5
RS
378
379The function @code{elt} is similar, but applies to any kind of sequence.
380For historical reasons, it takes its arguments in the opposite order.
381@xref{Sequence Functions}.
73804d4b
RS
382@end defun
383
384@defun nthcdr n list
385This function returns the @var{n}th @sc{cdr} of @var{list}. In other
f9f59935 386words, it skips past the first @var{n} links of @var{list} and returns
73804d4b
RS
387what follows.
388
389If @var{n} is zero or negative, @code{nthcdr} returns all of
390@var{list}. If the length of @var{list} is @var{n} or less,
391@code{nthcdr} returns @code{nil}.
392
393@example
394@group
395(nthcdr 1 '(1 2 3 4))
396 @result{} (2 3 4)
397@end group
398@group
399(nthcdr 10 '(1 2 3 4))
400 @result{} nil
401@end group
402@group
403(nthcdr -3 '(1 2 3 4))
404 @result{} (1 2 3 4)
405@end group
406@end example
407@end defun
408
dbda27d1 409@defun last list &optional n
6fe50867
RS
410This function returns the last link of @var{list}. The @code{car} of
411this link is the list's last element. If @var{list} is null,
412@code{nil} is returned. If @var{n} is non-@code{nil}, the
413@var{n}th-to-last link is returned instead, or the whole of @var{list}
414if @var{n} is bigger than @var{list}'s length.
dbda27d1
DL
415@end defun
416
969fe9b5 417@defun safe-length list
7baeca0c 418@anchor{Definition of safe-length}
d6702947
RS
419This function returns the length of @var{list}, with no risk of either
420an error or an infinite loop. It generally returns the number of
421distinct cons cells in the list. However, for circular lists,
422the value is just an upper bound; it is often too large.
f9f59935 423
d6702947
RS
424If @var{list} is not @code{nil} or a cons cell, @code{safe-length}
425returns 0.
f9f59935
RS
426@end defun
427
969fe9b5
RS
428 The most common way to compute the length of a list, when you are not
429worried that it may be circular, is with @code{length}. @xref{Sequence
430Functions}.
431
969fe9b5
RS
432@defun caar cons-cell
433This is the same as @code{(car (car @var{cons-cell}))}.
f9f59935
RS
434@end defun
435
969fe9b5
RS
436@defun cadr cons-cell
437This is the same as @code{(car (cdr @var{cons-cell}))}
438or @code{(nth 1 @var{cons-cell})}.
f9f59935
RS
439@end defun
440
969fe9b5
RS
441@defun cdar cons-cell
442This is the same as @code{(cdr (car @var{cons-cell}))}.
f9f59935
RS
443@end defun
444
969fe9b5
RS
445@defun cddr cons-cell
446This is the same as @code{(cdr (cdr @var{cons-cell}))}
447or @code{(nthcdr 2 @var{cons-cell})}.
f9f59935
RS
448@end defun
449
023045d6
DL
450@defun butlast x &optional n
451This function returns the list @var{x} with the last element,
452or the last @var{n} elements, removed. If @var{n} is greater
453than zero it makes a copy of the list so as not to damage the
454original list. In general, @code{(append (butlast @var{x} @var{n})
455(last @var{x} @var{n}))} will return a list equal to @var{x}.
456@end defun
457
458@defun nbutlast x &optional n
459This is a version of @code{butlast} that works by destructively
460modifying the @code{cdr} of the appropriate element, rather than
461making a copy of the list.
462@end defun
463
73804d4b
RS
464@node Building Lists
465@comment node-name, next, previous, up
466@section Building Cons Cells and Lists
467@cindex cons cells
468@cindex building lists
469
470 Many functions build lists, as lists reside at the very heart of Lisp.
471@code{cons} is the fundamental list-building function; however, it is
472interesting to note that @code{list} is used more times in the source
473code for Emacs than @code{cons}.
474
475@defun cons object1 object2
a2fdaa28 476This function is the most basic function for building new list
73804d4b 477structure. It creates a new cons cell, making @var{object1} the
a2fdaa28
RS
478@sc{car}, and @var{object2} the @sc{cdr}. It then returns the new
479cons cell. The arguments @var{object1} and @var{object2} may be any
480Lisp objects, but most often @var{object2} is a list.
73804d4b
RS
481
482@example
483@group
484(cons 1 '(2))
485 @result{} (1 2)
486@end group
487@group
488(cons 1 '())
489 @result{} (1)
490@end group
491@group
492(cons 1 2)
493 @result{} (1 . 2)
494@end group
495@end example
496
497@cindex consing
498@code{cons} is often used to add a single element to the front of a
1e344ee2
SM
499list. This is called @dfn{consing the element onto the list}.
500@footnote{There is no strictly equivalent way to add an element to
501the end of a list. You can use @code{(append @var{listname} (list
502@var{newelt}))}, which creates a whole new list by copying @var{listname}
503and adding @var{newelt} to its end. Or you can use @code{(nconc
504@var{listname} (list @var{newelt}))}, which modifies @var{listname}
505by following all the @sc{cdr}s and then replacing the terminating
506@code{nil}. Compare this to adding an element to the beginning of a
507list with @code{cons}, which neither copies nor modifies the list.}
508For example:
73804d4b
RS
509
510@example
511(setq list (cons newelt list))
512@end example
513
514Note that there is no conflict between the variable named @code{list}
515used in this example and the function named @code{list} described below;
516any symbol can serve both purposes.
517@end defun
518
8241495d
RS
519@tindex push
520@defmac push newelt listname
521This macro provides an alternative way to write
522@code{(setq @var{listname} (cons @var{newelt} @var{listname}))}.
523It is new in Emacs 21.
a9749dab
RS
524
525@example
177c0ea7 526(setq l '(a b))
a9749dab
RS
527 @result{} (a b)
528(push 'c l)
529 @result{} (c a b)
530l
531 @result{} (c a b)
532@end example
8241495d
RS
533@end defmac
534
73804d4b
RS
535@defun list &rest objects
536This function creates a list with @var{objects} as its elements. The
537resulting list is always @code{nil}-terminated. If no @var{objects}
538are given, the empty list is returned.
539
540@example
541@group
542(list 1 2 3 4 5)
543 @result{} (1 2 3 4 5)
544@end group
545@group
546(list 1 2 '(3 4 5) 'foo)
547 @result{} (1 2 (3 4 5) foo)
548@end group
549@group
550(list)
551 @result{} nil
552@end group
553@end example
554@end defun
555
556@defun make-list length object
a9749dab
RS
557This function creates a list of @var{length} elements, in which each
558element is @var{object}. Compare @code{make-list} with
559@code{make-string} (@pxref{Creating Strings}).
73804d4b
RS
560
561@example
562@group
563(make-list 3 'pigs)
564 @result{} (pigs pigs pigs)
565@end group
566@group
567(make-list 0 'pigs)
568 @result{} nil
569@end group
a9749dab
RS
570@group
571(setq l (make-list 3 '(a b))
572 @result{} ((a b) (a b) (a b))
573(eq (car l) (cadr l))
574 @result{} t
575@end group
73804d4b
RS
576@end example
577@end defun
578
579@defun append &rest sequences
580@cindex copying lists
581This function returns a list containing all the elements of
969fe9b5
RS
582@var{sequences}. The @var{sequences} may be lists, vectors,
583bool-vectors, or strings, but the last one should usually be a list.
584All arguments except the last one are copied, so none of the arguments
585is altered. (See @code{nconc} in @ref{Rearrangement}, for a way to join
586lists with no copying.)
2b3fc6c3
RS
587
588More generally, the final argument to @code{append} may be any Lisp
589object. The final argument is not copied or converted; it becomes the
590@sc{cdr} of the last cons cell in the new list. If the final argument
591is itself a list, then its elements become in effect elements of the
592result list. If the final element is not a list, the result is a
948caddf 593dotted list since its final @sc{cdr} is not @code{nil} as required
2b3fc6c3 594in a true list.
73804d4b 595
19017752
LT
596In Emacs 20 and before, the @code{append} function also allowed
597integers as (non last) arguments. It converted them to strings of
598digits, making up the decimal print representation of the integer, and
599then used the strings instead of the original integers. This obsolete
600usage no longer works. The proper way to convert an integer to a
601decimal number in this way is with @code{format} (@pxref{Formatting
602Strings}) or @code{number-to-string} (@pxref{String Conversion}).
7dd3d99f
RS
603@end defun
604
605 Here is an example of using @code{append}:
73804d4b
RS
606
607@example
608@group
609(setq trees '(pine oak))
610 @result{} (pine oak)
611(setq more-trees (append '(maple birch) trees))
612 @result{} (maple birch pine oak)
613@end group
614
615@group
616trees
617 @result{} (pine oak)
618more-trees
619 @result{} (maple birch pine oak)
620@end group
621@group
622(eq trees (cdr (cdr more-trees)))
623 @result{} t
624@end group
625@end example
626
7dd3d99f 627 You can see how @code{append} works by looking at a box diagram. The
2b3fc6c3
RS
628variable @code{trees} is set to the list @code{(pine oak)} and then the
629variable @code{more-trees} is set to the list @code{(maple birch pine
630oak)}. However, the variable @code{trees} continues to refer to the
631original list:
73804d4b
RS
632
633@smallexample
634@group
635more-trees trees
636| |
969fe9b5
RS
637| --- --- --- --- -> --- --- --- ---
638 --> | | |--> | | |--> | | |--> | | |--> nil
639 --- --- --- --- --- --- --- ---
73804d4b
RS
640 | | | |
641 | | | |
642 --> maple -->birch --> pine --> oak
643@end group
644@end smallexample
645
7dd3d99f 646 An empty sequence contributes nothing to the value returned by
73804d4b 647@code{append}. As a consequence of this, a final @code{nil} argument
7dd3d99f 648forces a copy of the previous argument:
73804d4b
RS
649
650@example
651@group
652trees
653 @result{} (pine oak)
654@end group
655@group
969fe9b5 656(setq wood (append trees nil))
73804d4b
RS
657 @result{} (pine oak)
658@end group
659@group
660wood
661 @result{} (pine oak)
662@end group
663@group
664(eq wood trees)
665 @result{} nil
666@end group
667@end example
668
669@noindent
670This once was the usual way to copy a list, before the function
671@code{copy-sequence} was invented. @xref{Sequences Arrays Vectors}.
672
7dd3d99f 673 Here we show the use of vectors and strings as arguments to @code{append}:
969fe9b5
RS
674
675@example
676@group
677(append [a b] "cd" nil)
678 @result{} (a b 99 100)
679@end group
680@end example
681
7dd3d99f 682 With the help of @code{apply} (@pxref{Calling Functions}), we can append
a9f0a989 683all the lists in a list of lists:
73804d4b
RS
684
685@example
686@group
687(apply 'append '((a b c) nil (x y z) nil))
688 @result{} (a b c x y z)
689@end group
690@end example
691
7dd3d99f 692 If no @var{sequences} are given, @code{nil} is returned:
73804d4b
RS
693
694@example
695@group
696(append)
697 @result{} nil
698@end group
699@end example
700
7dd3d99f 701 Here are some examples where the final argument is not a list:
2b3fc6c3
RS
702
703@example
704(append '(x y) 'z)
bfe721d1 705 @result{} (x y . z)
2b3fc6c3 706(append '(x y) [z])
bfe721d1 707 @result{} (x y . [z])
2b3fc6c3
RS
708@end example
709
710@noindent
711The second example shows that when the final argument is a sequence but
712not a list, the sequence's elements do not become elements of the
713resulting list. Instead, the sequence becomes the final @sc{cdr}, like
714any other non-list final argument.
73804d4b 715
73804d4b
RS
716@defun reverse list
717This function creates a new list whose elements are the elements of
718@var{list}, but in reverse order. The original argument @var{list} is
719@emph{not} altered.
720
721@example
722@group
723(setq x '(1 2 3 4))
724 @result{} (1 2 3 4)
725@end group
726@group
727(reverse x)
728 @result{} (4 3 2 1)
729x
730 @result{} (1 2 3 4)
731@end group
732@end example
733@end defun
734
84c3f248 735@defun copy-tree tree &optional vecp
948caddf 736This function returns a copy of the tree @code{tree}. If @var{tree} is a
84c3f248
RS
737cons cell, this makes a new cons cell with the same @sc{car} and
738@sc{cdr}, then recursively copies the @sc{car} and @sc{cdr} in the
739same way.
740
741Normally, when @var{tree} is anything other than a cons cell,
742@code{copy-tree} simply returns @var{tree}. However, if @var{vecp} is
743non-@code{nil}, it copies vectors too (and operates recursively on
744their elements).
745@end defun
746
19017752
LT
747@defun number-sequence from &optional to separation
748This returns a list of numbers starting with @var{from} and
749incrementing by @var{separation}, and ending at or just before
750@var{to}. @var{separation} can be positive or negative and defaults
751to 1. If @var{to} is @code{nil} or numerically equal to @var{from},
752the one element list @code{(from)} is returned. If @var{separation}
753is 0 and @var{to} is neither @code{nil} nor numerically equal to
754@var{from}, an error is signaled.
755
756All arguments can be integers or floating point numbers. However,
757floating point arguments can be tricky, because floating point
758arithmetic is inexact. For instance, depending on the machine, it may
759quite well happen that @code{(number-sequence 0.4 0.6 0.2)} returns
948caddf 760the one element list @code{(0.4)}, whereas
19017752
LT
761@code{(number-sequence 0.4 0.8 0.2)} returns a list with three
762elements. The @var{n}th element of the list is computed by the exact
763formula @code{(+ @var{from} (* @var{n} @var{separation}))}. Thus, if
764one wants to make sure that @var{to} is included in the list, one can
765pass an expression of this exact type for @var{to}. Alternatively,
766one can replace @var{to} with a slightly larger value (or a slightly
767more negative value if @var{separation} is negative).
768
769Some examples:
1006f206
RS
770
771@example
772(number-sequence 4 9)
773 @result{} (4 5 6 7 8 9)
19017752
LT
774(number-sequence 9 4 -1)
775 @result{} (9 8 7 6 5 4)
776(number-sequence 9 4 -2)
777 @result{} (9 7 5)
778(number-sequence 8)
779 @result{} (8)
780(number-sequence 8 5)
781 @result{} nil
782(number-sequence 5 8 -1)
783 @result{} nil
1006f206
RS
784(number-sequence 1.5 6 2)
785 @result{} (1.5 3.5 5.5)
786@end example
787@end defun
788
73804d4b
RS
789@node Modifying Lists
790@section Modifying Existing List Structure
f1e2c45e 791@cindex destructive list operations
73804d4b
RS
792
793 You can modify the @sc{car} and @sc{cdr} contents of a cons cell with the
177c0ea7 794primitives @code{setcar} and @code{setcdr}. We call these ``destructive''
f1e2c45e 795operations because they change existing list structure.
73804d4b
RS
796
797@cindex CL note---@code{rplaca} vrs @code{setcar}
798@quotation
799@findex rplaca
800@findex rplacd
801@b{Common Lisp note:} Common Lisp uses functions @code{rplaca} and
802@code{rplacd} to alter list structure; they change structure the same
803way as @code{setcar} and @code{setcdr}, but the Common Lisp functions
804return the cons cell while @code{setcar} and @code{setcdr} return the
805new @sc{car} or @sc{cdr}.
806@end quotation
807
808@menu
809* Setcar:: Replacing an element in a list.
810* Setcdr:: Replacing part of the list backbone.
811 This can be used to remove or add elements.
812* Rearrangement:: Reordering the elements in a list; combining lists.
813@end menu
814
815@node Setcar
816@subsection Altering List Elements with @code{setcar}
817
2b3fc6c3
RS
818 Changing the @sc{car} of a cons cell is done with @code{setcar}. When
819used on a list, @code{setcar} replaces one element of a list with a
820different element.
73804d4b
RS
821
822@defun setcar cons object
823This function stores @var{object} as the new @sc{car} of @var{cons},
74490e55 824replacing its previous @sc{car}. In other words, it changes the
b6954afd 825@sc{car} slot of @var{cons} to refer to @var{object}. It returns the
74490e55 826value @var{object}. For example:
73804d4b
RS
827
828@example
829@group
830(setq x '(1 2))
831 @result{} (1 2)
832@end group
833@group
834(setcar x 4)
835 @result{} 4
836@end group
837@group
838x
839 @result{} (4 2)
840@end group
841@end example
842@end defun
843
844 When a cons cell is part of the shared structure of several lists,
845storing a new @sc{car} into the cons changes one element of each of
846these lists. Here is an example:
847
848@example
849@group
850;; @r{Create two lists that are partly shared.}
851(setq x1 '(a b c))
852 @result{} (a b c)
853(setq x2 (cons 'z (cdr x1)))
854 @result{} (z b c)
855@end group
856
857@group
858;; @r{Replace the @sc{car} of a shared link.}
859(setcar (cdr x1) 'foo)
860 @result{} foo
861x1 ; @r{Both lists are changed.}
862 @result{} (a foo c)
863x2
864 @result{} (z foo c)
865@end group
866
867@group
868;; @r{Replace the @sc{car} of a link that is not shared.}
869(setcar x1 'baz)
870 @result{} baz
871x1 ; @r{Only one list is changed.}
872 @result{} (baz foo c)
873x2
874 @result{} (z foo c)
875@end group
876@end example
877
878 Here is a graphical depiction of the shared structure of the two lists
879in the variables @code{x1} and @code{x2}, showing why replacing @code{b}
880changes them both:
881
882@example
883@group
969fe9b5
RS
884 --- --- --- --- --- ---
885x1---> | | |----> | | |--> | | |--> nil
886 --- --- --- --- --- ---
73804d4b
RS
887 | --> | |
888 | | | |
889 --> a | --> b --> c
890 |
969fe9b5
RS
891 --- --- |
892x2--> | | |--
893 --- ---
73804d4b
RS
894 |
895 |
896 --> z
897@end group
898@end example
899
900 Here is an alternative form of box diagram, showing the same relationship:
901
902@example
903@group
904x1:
905 -------------- -------------- --------------
906| car | cdr | | car | cdr | | car | cdr |
907| a | o------->| b | o------->| c | nil |
908| | | -->| | | | | |
909 -------------- | -------------- --------------
910 |
911x2: |
912 -------------- |
913| car | cdr | |
914| z | o----
915| | |
916 --------------
917@end group
918@end example
919
920@node Setcdr
921@subsection Altering the CDR of a List
922
923 The lowest-level primitive for modifying a @sc{cdr} is @code{setcdr}:
924
925@defun setcdr cons object
2b3fc6c3 926This function stores @var{object} as the new @sc{cdr} of @var{cons},
74490e55 927replacing its previous @sc{cdr}. In other words, it changes the
b6954afd 928@sc{cdr} slot of @var{cons} to refer to @var{object}. It returns the
74490e55 929value @var{object}.
73804d4b
RS
930@end defun
931
932 Here is an example of replacing the @sc{cdr} of a list with a
933different list. All but the first element of the list are removed in
934favor of a different sequence of elements. The first element is
935unchanged, because it resides in the @sc{car} of the list, and is not
936reached via the @sc{cdr}.
937
938@example
939@group
940(setq x '(1 2 3))
941 @result{} (1 2 3)
942@end group
943@group
944(setcdr x '(4))
945 @result{} (4)
946@end group
947@group
948x
949 @result{} (1 4)
950@end group
951@end example
952
953 You can delete elements from the middle of a list by altering the
954@sc{cdr}s of the cons cells in the list. For example, here we delete
955the second element, @code{b}, from the list @code{(a b c)}, by changing
74490e55 956the @sc{cdr} of the first cons cell:
73804d4b
RS
957
958@example
959@group
960(setq x1 '(a b c))
961 @result{} (a b c)
962(setcdr x1 (cdr (cdr x1)))
963 @result{} (c)
964x1
965 @result{} (a c)
966@end group
967@end example
968
bda144f4 969@need 4000
73804d4b
RS
970 Here is the result in box notation:
971
972@example
973@group
974 --------------------
975 | |
976 -------------- | -------------- | --------------
977| car | cdr | | | car | cdr | -->| car | cdr |
978| a | o----- | b | o-------->| c | nil |
979| | | | | | | | |
980 -------------- -------------- --------------
981@end group
982@end example
983
984@noindent
985The second cons cell, which previously held the element @code{b}, still
986exists and its @sc{car} is still @code{b}, but it no longer forms part
987of this list.
988
989 It is equally easy to insert a new element by changing @sc{cdr}s:
990
991@example
992@group
993(setq x1 '(a b c))
994 @result{} (a b c)
995(setcdr x1 (cons 'd (cdr x1)))
996 @result{} (d b c)
997x1
998 @result{} (a d b c)
999@end group
1000@end example
1001
1002 Here is this result in box notation:
1003
1004@smallexample
1005@group
1006 -------------- ------------- -------------
1007| car | cdr | | car | cdr | | car | cdr |
1008| a | o | -->| b | o------->| c | nil |
1009| | | | | | | | | | |
1010 --------- | -- | ------------- -------------
1011 | |
1012 ----- --------
1013 | |
1014 | --------------- |
1015 | | car | cdr | |
1016 -->| d | o------
1017 | | |
1018 ---------------
1019@end group
1020@end smallexample
1021
1022@node Rearrangement
1023@subsection Functions that Rearrange Lists
1024@cindex rearrangement of lists
1025@cindex modification of lists
1026
1027 Here are some functions that rearrange lists ``destructively'' by
1028modifying the @sc{cdr}s of their component cons cells. We call these
1029functions ``destructive'' because they chew up the original lists passed
f1e2c45e
RS
1030to them as arguments, relinking their cons cells to form a new list that
1031is the returned value.
73804d4b 1032
37680279 1033@ifnottex
2b3fc6c3
RS
1034 See @code{delq}, in @ref{Sets And Lists}, for another function
1035that modifies cons cells.
37680279 1036@end ifnottex
2b3fc6c3
RS
1037@iftex
1038 The function @code{delq} in the following section is another example
1039of destructive list manipulation.
1040@end iftex
1041
73804d4b
RS
1042@defun nconc &rest lists
1043@cindex concatenating lists
1044@cindex joining lists
1045This function returns a list containing all the elements of @var{lists}.
1046Unlike @code{append} (@pxref{Building Lists}), the @var{lists} are
1047@emph{not} copied. Instead, the last @sc{cdr} of each of the
1048@var{lists} is changed to refer to the following list. The last of the
1049@var{lists} is not altered. For example:
1050
1051@example
1052@group
1053(setq x '(1 2 3))
1054 @result{} (1 2 3)
1055@end group
1056@group
1057(nconc x '(4 5))
1058 @result{} (1 2 3 4 5)
1059@end group
1060@group
1061x
1062 @result{} (1 2 3 4 5)
1063@end group
1064@end example
1065
1066 Since the last argument of @code{nconc} is not itself modified, it is
1067reasonable to use a constant list, such as @code{'(4 5)}, as in the
1068above example. For the same reason, the last argument need not be a
1069list:
1070
1071@example
1072@group
1073(setq x '(1 2 3))
1074 @result{} (1 2 3)
1075@end group
1076@group
1077(nconc x 'z)
1078 @result{} (1 2 3 . z)
1079@end group
1080@group
1081x
1082 @result{} (1 2 3 . z)
1083@end group
1084@end example
1085
969fe9b5
RS
1086However, the other arguments (all but the last) must be lists.
1087
73804d4b
RS
1088A common pitfall is to use a quoted constant list as a non-last
1089argument to @code{nconc}. If you do this, your program will change
1090each time you run it! Here is what happens:
1091
1092@smallexample
1093@group
1094(defun add-foo (x) ; @r{We want this function to add}
1095 (nconc '(foo) x)) ; @r{@code{foo} to the front of its arg.}
1096@end group
1097
1098@group
1099(symbol-function 'add-foo)
1100 @result{} (lambda (x) (nconc (quote (foo)) x))
1101@end group
1102
1103@group
1104(setq xx (add-foo '(1 2))) ; @r{It seems to work.}
1105 @result{} (foo 1 2)
1106@end group
1107@group
1108(setq xy (add-foo '(3 4))) ; @r{What happened?}
1109 @result{} (foo 1 2 3 4)
1110@end group
1111@group
1112(eq xx xy)
1113 @result{} t
1114@end group
1115
1116@group
1117(symbol-function 'add-foo)
1118 @result{} (lambda (x) (nconc (quote (foo 1 2 3 4) x)))
1119@end group
1120@end smallexample
1121@end defun
1122
1123@defun nreverse list
1124@cindex reversing a list
1125 This function reverses the order of the elements of @var{list}.
2b3fc6c3
RS
1126Unlike @code{reverse}, @code{nreverse} alters its argument by reversing
1127the @sc{cdr}s in the cons cells forming the list. The cons cell that
74490e55 1128used to be the last one in @var{list} becomes the first cons cell of the
2b3fc6c3 1129value.
73804d4b
RS
1130
1131 For example:
1132
1133@example
1134@group
a9749dab
RS
1135(setq x '(a b c))
1136 @result{} (a b c)
73804d4b
RS
1137@end group
1138@group
1139x
a9749dab 1140 @result{} (a b c)
73804d4b 1141(nreverse x)
a9749dab 1142 @result{} (c b a)
73804d4b
RS
1143@end group
1144@group
74490e55 1145;; @r{The cons cell that was first is now last.}
73804d4b 1146x
a9749dab 1147 @result{} (a)
73804d4b
RS
1148@end group
1149@end example
1150
1151 To avoid confusion, we usually store the result of @code{nreverse}
1152back in the same variable which held the original list:
1153
1154@example
1155(setq x (nreverse x))
1156@end example
1157
1158 Here is the @code{nreverse} of our favorite example, @code{(a b c)},
1159presented graphically:
1160
1161@smallexample
1162@group
1163@r{Original list head:} @r{Reversed list:}
1164 ------------- ------------- ------------
1165| car | cdr | | car | cdr | | car | cdr |
1166| a | nil |<-- | b | o |<-- | c | o |
1167| | | | | | | | | | | | |
1168 ------------- | --------- | - | -------- | -
1169 | | | |
1170 ------------- ------------
1171@end group
1172@end smallexample
1173@end defun
1174
1175@defun sort list predicate
1176@cindex stable sort
1177@cindex sorting lists
1178This function sorts @var{list} stably, though destructively, and
1179returns the sorted list. It compares elements using @var{predicate}. A
1180stable sort is one in which elements with equal sort keys maintain their
1181relative order before and after the sort. Stability is important when
1182successive sorts are used to order elements according to different
1183criteria.
1184
1185The argument @var{predicate} must be a function that accepts two
1186arguments. It is called with two elements of @var{list}. To get an
1187increasing order sort, the @var{predicate} should return @code{t} if the
1188first element is ``less than'' the second, or @code{nil} if not.
1189
a9f0a989
RS
1190The comparison function @var{predicate} must give reliable results for
1191any given pair of arguments, at least within a single call to
1192@code{sort}. It must be @dfn{antisymmetric}; that is, if @var{a} is
1193less than @var{b}, @var{b} must not be less than @var{a}. It must be
1194@dfn{transitive}---that is, if @var{a} is less than @var{b}, and @var{b}
1195is less than @var{c}, then @var{a} must be less than @var{c}. If you
1196use a comparison function which does not meet these requirements, the
1197result of @code{sort} is unpredictable.
1198
73804d4b
RS
1199The destructive aspect of @code{sort} is that it rearranges the cons
1200cells forming @var{list} by changing @sc{cdr}s. A nondestructive sort
1201function would create new cons cells to store the elements in their
1202sorted order. If you wish to make a sorted copy without destroying the
1203original, copy it first with @code{copy-sequence} and then sort.
1204
1205Sorting does not change the @sc{car}s of the cons cells in @var{list};
1206the cons cell that originally contained the element @code{a} in
1207@var{list} still has @code{a} in its @sc{car} after sorting, but it now
1208appears in a different position in the list due to the change of
1209@sc{cdr}s. For example:
1210
1211@example
1212@group
1213(setq nums '(1 3 2 6 5 4 0))
1214 @result{} (1 3 2 6 5 4 0)
1215@end group
1216@group
1217(sort nums '<)
1218 @result{} (0 1 2 3 4 5 6)
1219@end group
1220@group
1221nums
1222 @result{} (1 2 3 4 5 6)
1223@end group
1224@end example
1225
1226@noindent
f9f59935
RS
1227@strong{Warning}: Note that the list in @code{nums} no longer contains
12280; this is the same cons cell that it was before, but it is no longer
1229the first one in the list. Don't assume a variable that formerly held
1230the argument now holds the entire sorted list! Instead, save the result
1231of @code{sort} and use that. Most often we store the result back into
1232the variable that held the original list:
73804d4b
RS
1233
1234@example
1235(setq nums (sort nums '<))
1236@end example
1237
1238@xref{Sorting}, for more functions that perform sorting.
1239See @code{documentation} in @ref{Accessing Documentation}, for a
1240useful example of @code{sort}.
1241@end defun
1242
73804d4b
RS
1243@node Sets And Lists
1244@section Using Lists as Sets
1245@cindex lists as sets
1246@cindex sets
1247
1248 A list can represent an unordered mathematical set---simply consider a
1249value an element of a set if it appears in the list, and ignore the
1250order of the list. To form the union of two sets, use @code{append} (as
42101e87
LT
1251long as you don't mind having duplicate elements). You can remove
1252@code{equal} duplicates using @code{delete-dups}. Other useful
73804d4b
RS
1253functions for sets include @code{memq} and @code{delq}, and their
1254@code{equal} versions, @code{member} and @code{delete}.
1255
b5ef0e92 1256@cindex CL note---lack @code{union}, @code{intersection}
73804d4b
RS
1257@quotation
1258@b{Common Lisp note:} Common Lisp has functions @code{union} (which
1259avoids duplicate elements) and @code{intersection} for set operations,
1260but GNU Emacs Lisp does not have them. You can write them in Lisp if
1261you wish.
1262@end quotation
1263
1264@defun memq object list
1265@cindex membership in a list
1266This function tests to see whether @var{object} is a member of
1267@var{list}. If it is, @code{memq} returns a list starting with the
1268first occurrence of @var{object}. Otherwise, it returns @code{nil}.
1269The letter @samp{q} in @code{memq} says that it uses @code{eq} to
1270compare @var{object} against the elements of the list. For example:
1271
1272@example
1273@group
2b3fc6c3
RS
1274(memq 'b '(a b c b a))
1275 @result{} (b c b a)
73804d4b
RS
1276@end group
1277@group
1278(memq '(2) '((1) (2))) ; @r{@code{(2)} and @code{(2)} are not @code{eq}.}
1279 @result{} nil
1280@end group
1281@end example
1282@end defun
1283
1284@defun delq object list
1285@cindex deletion of elements
1286This function destructively removes all elements @code{eq} to
1287@var{object} from @var{list}. The letter @samp{q} in @code{delq} says
1288that it uses @code{eq} to compare @var{object} against the elements of
f68446ef 1289the list, like @code{memq} and @code{remq}.
73804d4b
RS
1290@end defun
1291
1292When @code{delq} deletes elements from the front of the list, it does so
1293simply by advancing down the list and returning a sublist that starts
1294after those elements:
1295
1296@example
1297@group
1298(delq 'a '(a b c)) @equiv{} (cdr '(a b c))
1299@end group
1300@end example
1301
1302When an element to be deleted appears in the middle of the list,
1303removing it involves changing the @sc{cdr}s (@pxref{Setcdr}).
1304
1305@example
1306@group
2b3fc6c3
RS
1307(setq sample-list '(a b c (4)))
1308 @result{} (a b c (4))
73804d4b
RS
1309@end group
1310@group
2b3fc6c3
RS
1311(delq 'a sample-list)
1312 @result{} (b c (4))
73804d4b
RS
1313@end group
1314@group
1315sample-list
2b3fc6c3 1316 @result{} (a b c (4))
73804d4b
RS
1317@end group
1318@group
2b3fc6c3 1319(delq 'c sample-list)
34e1af81 1320 @result{} (a b (4))
73804d4b
RS
1321@end group
1322@group
1323sample-list
34e1af81 1324 @result{} (a b (4))
73804d4b
RS
1325@end group
1326@end example
1327
bfe721d1
KH
1328Note that @code{(delq 'c sample-list)} modifies @code{sample-list} to
1329splice out the third element, but @code{(delq 'a sample-list)} does not
73804d4b
RS
1330splice anything---it just returns a shorter list. Don't assume that a
1331variable which formerly held the argument @var{list} now has fewer
1332elements, or that it still holds the original list! Instead, save the
1333result of @code{delq} and use that. Most often we store the result back
1334into the variable that held the original list:
1335
1336@example
1337(setq flowers (delq 'rose flowers))
1338@end example
1339
1340In the following example, the @code{(4)} that @code{delq} attempts to match
1341and the @code{(4)} in the @code{sample-list} are not @code{eq}:
1342
1343@example
1344@group
1345(delq '(4) sample-list)
2b3fc6c3 1346 @result{} (a c (4))
73804d4b
RS
1347@end group
1348@end example
1349
9f081286
RS
1350@defun remq object list
1351This function returns a copy of @var{list}, with all elements removed
1352which are @code{eq} to @var{object}. The letter @samp{q} in @code{remq}
1353says that it uses @code{eq} to compare @var{object} against the elements
1354of @code{list}.
1355
1356@example
1357@group
1358(setq sample-list '(a b c a b c))
1359 @result{} (a b c a b c)
1360@end group
1361@group
1362(remq 'a sample-list)
1363 @result{} (b c b c)
1364@end group
1365@group
1366sample-list
1367 @result{} (a b c a b c)
1368@end group
1369@end example
1370@noindent
1371The function @code{delq} offers a way to perform this operation
1372destructively. See @ref{Sets And Lists}.
1373@end defun
1374
1375The following three functions are like @code{memq}, @code{delq} and
1376@code{remq}, but use @code{equal} rather than @code{eq} to compare
1377elements. @xref{Equality Predicates}.
73804d4b
RS
1378
1379@defun member object list
1380The function @code{member} tests to see whether @var{object} is a member
1381of @var{list}, comparing members with @var{object} using @code{equal}.
1382If @var{object} is a member, @code{member} returns a list starting with
1383its first occurrence in @var{list}. Otherwise, it returns @code{nil}.
1384
1385Compare this with @code{memq}:
1386
1387@example
1388@group
1389(member '(2) '((1) (2))) ; @r{@code{(2)} and @code{(2)} are @code{equal}.}
1390 @result{} ((2))
1391@end group
1392@group
1393(memq '(2) '((1) (2))) ; @r{@code{(2)} and @code{(2)} are not @code{eq}.}
1394 @result{} nil
1395@end group
1396@group
1397;; @r{Two strings with the same contents are @code{equal}.}
1398(member "foo" '("foo" "bar"))
1399 @result{} ("foo" "bar")
1400@end group
1401@end example
1402@end defun
1403
f68446ef
GM
1404@defun delete object sequence
1405If @code{sequence} is a list, this function destructively removes all
1406elements @code{equal} to @var{object} from @var{sequence}. For lists,
1407@code{delete} is to @code{delq} as @code{member} is to @code{memq}: it
1408uses @code{equal} to compare elements with @var{object}, like
1409@code{member}; when it finds an element that matches, it removes the
1410element just as @code{delq} would.
1411
1412If @code{sequence} is a vector or string, @code{delete} returns a copy
1413of @code{sequence} with all elements @code{equal} to @code{object}
1414removed.
1415
1416For example:
73804d4b
RS
1417
1418@example
1419@group
1420(delete '(2) '((2) (1) (2)))
b5ef0e92 1421 @result{} ((1))
73804d4b 1422@end group
f68446ef
GM
1423@group
1424(delete '(2) [(2) (1) (2)])
1425 @result{} [(1)]
1426@end group
1427@end example
1428@end defun
1429
1430@defun remove object sequence
1431This function is the non-destructive counterpart of @code{delete}. If
1432returns a copy of @code{sequence}, a list, vector, or string, with
1433elements @code{equal} to @code{object} removed. For example:
1434
1435@example
1436@group
1437(remove '(2) '((2) (1) (2)))
1438 @result{} ((1))
1439@end group
1440@group
1441(remove '(2) [(2) (1) (2)])
1442 @result{} [(1)]
1443@end group
73804d4b
RS
1444@end example
1445@end defun
1446
1447@quotation
f68446ef
GM
1448@b{Common Lisp note:} The functions @code{member}, @code{delete} and
1449@code{remove} in GNU Emacs Lisp are derived from Maclisp, not Common
1450Lisp. The Common Lisp versions do not use @code{equal} to compare
1451elements.
73804d4b
RS
1452@end quotation
1453
19017752
LT
1454@defun member-ignore-case object list
1455This function is like @code{member}, except that @var{object} should
1456be a string and that it ignores differences in letter-case and text
1457representation: upper-case and lower-case letters are treated as
1458equal, and unibyte strings are converted to multibyte prior to
1459comparison.
42101e87
LT
1460@end defun
1461
1462@defun delete-dups list
1463This function destructively removes all @code{equal} duplicates from
efb47843
LT
1464@var{list}, stores the result in @var{list} and returns it. Of
1465several @code{equal} occurrences of an element in @var{list},
1466@code{delete-dups} keeps the first one.
19017752
LT
1467@end defun
1468
bfe721d1
KH
1469 See also the function @code{add-to-list}, in @ref{Setting Variables},
1470for another way to add an element to a list stored in a variable.
1471
73804d4b
RS
1472@node Association Lists
1473@section Association Lists
1474@cindex association list
1475@cindex alist
1476
1477 An @dfn{association list}, or @dfn{alist} for short, records a mapping
1478from keys to values. It is a list of cons cells called
74490e55 1479@dfn{associations}: the @sc{car} of each cons cell is the @dfn{key}, and the
73804d4b
RS
1480@sc{cdr} is the @dfn{associated value}.@footnote{This usage of ``key''
1481is not related to the term ``key sequence''; it means a value used to
1482look up an item in a table. In this case, the table is the alist, and
1483the alist associations are the items.}
1484
1485 Here is an example of an alist. The key @code{pine} is associated with
1486the value @code{cones}; the key @code{oak} is associated with
1487@code{acorns}; and the key @code{maple} is associated with @code{seeds}.
1488
1489@example
1490@group
a9749dab
RS
1491((pine . cones)
1492 (oak . acorns)
1493 (maple . seeds))
73804d4b
RS
1494@end group
1495@end example
1496
1497 The associated values in an alist may be any Lisp objects; so may the
1498keys. For example, in the following alist, the symbol @code{a} is
1499associated with the number @code{1}, and the string @code{"b"} is
1500associated with the @emph{list} @code{(2 3)}, which is the @sc{cdr} of
1501the alist element:
1502
1503@example
1504((a . 1) ("b" 2 3))
1505@end example
1506
1507 Sometimes it is better to design an alist to store the associated
1508value in the @sc{car} of the @sc{cdr} of the element. Here is an
a9749dab 1509example of such an alist:
73804d4b
RS
1510
1511@example
a9749dab 1512((rose red) (lily white) (buttercup yellow))
73804d4b
RS
1513@end example
1514
1515@noindent
1516Here we regard @code{red} as the value associated with @code{rose}. One
f9f59935 1517advantage of this kind of alist is that you can store other related
73804d4b
RS
1518information---even a list of other items---in the @sc{cdr} of the
1519@sc{cdr}. One disadvantage is that you cannot use @code{rassq} (see
1520below) to find the element containing a given value. When neither of
1521these considerations is important, the choice is a matter of taste, as
1522long as you are consistent about it for any given alist.
1523
1524 Note that the same alist shown above could be regarded as having the
1525associated value in the @sc{cdr} of the element; the value associated
1526with @code{rose} would be the list @code{(red)}.
1527
1528 Association lists are often used to record information that you might
1529otherwise keep on a stack, since new associations may be added easily to
1530the front of the list. When searching an association list for an
1531association with a given key, the first one found is returned, if there
1532is more than one.
1533
1534 In Emacs Lisp, it is @emph{not} an error if an element of an
1535association list is not a cons cell. The alist search functions simply
1536ignore such elements. Many other versions of Lisp signal errors in such
1537cases.
1538
1539 Note that property lists are similar to association lists in several
1540respects. A property list behaves like an association list in which
1541each key can occur only once. @xref{Property Lists}, for a comparison
1542of property lists and association lists.
1543
1544@defun assoc key alist
1545This function returns the first association for @var{key} in
1546@var{alist}. It compares @var{key} against the alist elements using
1547@code{equal} (@pxref{Equality Predicates}). It returns @code{nil} if no
1548association in @var{alist} has a @sc{car} @code{equal} to @var{key}.
1549For example:
1550
1551@smallexample
1552(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))
1553 @result{} ((pine . cones) (oak . acorns) (maple . seeds))
1554(assoc 'oak trees)
1555 @result{} (oak . acorns)
1556(cdr (assoc 'oak trees))
1557 @result{} acorns
1558(assoc 'birch trees)
1559 @result{} nil
1560@end smallexample
1561
2b3fc6c3 1562Here is another example, in which the keys and values are not symbols:
73804d4b
RS
1563
1564@smallexample
1565(setq needles-per-cluster
1566 '((2 "Austrian Pine" "Red Pine")
1567 (3 "Pitch Pine")
1568 (5 "White Pine")))
1569
1570(cdr (assoc 3 needles-per-cluster))
1571 @result{} ("Pitch Pine")
1572(cdr (assoc 2 needles-per-cluster))
1573 @result{} ("Austrian Pine" "Red Pine")
1574@end smallexample
1575@end defun
1576
9f081286
RS
1577 The function @code{assoc-string} is much like @code{assoc} except
1578that it ignores certain differences between strings. @xref{Text
1579Comparison}.
a9f0a989 1580
22697dac
KH
1581@defun rassoc value alist
1582This function returns the first association with value @var{value} in
1583@var{alist}. It returns @code{nil} if no association in @var{alist} has
1584a @sc{cdr} @code{equal} to @var{value}.
1585
1586@code{rassoc} is like @code{assoc} except that it compares the @sc{cdr} of
1587each @var{alist} association instead of the @sc{car}. You can think of
1588this as ``reverse @code{assoc}'', finding the key for a given value.
1589@end defun
1590
73804d4b
RS
1591@defun assq key alist
1592This function is like @code{assoc} in that it returns the first
1593association for @var{key} in @var{alist}, but it makes the comparison
1594using @code{eq} instead of @code{equal}. @code{assq} returns @code{nil}
1595if no association in @var{alist} has a @sc{car} @code{eq} to @var{key}.
1596This function is used more often than @code{assoc}, since @code{eq} is
1597faster than @code{equal} and most alists use symbols as keys.
1598@xref{Equality Predicates}.
1599
1600@smallexample
1601(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))
1602 @result{} ((pine . cones) (oak . acorns) (maple . seeds))
1603(assq 'pine trees)
1604 @result{} (pine . cones)
1605@end smallexample
1606
1607On the other hand, @code{assq} is not usually useful in alists where the
1608keys may not be symbols:
1609
1610@smallexample
1611(setq leaves
1612 '(("simple leaves" . oak)
1613 ("compound leaves" . horsechestnut)))
1614
1615(assq "simple leaves" leaves)
1616 @result{} nil
1617(assoc "simple leaves" leaves)
1618 @result{} ("simple leaves" . oak)
1619@end smallexample
1620@end defun
1621
1622@defun rassq value alist
1623This function returns the first association with value @var{value} in
1624@var{alist}. It returns @code{nil} if no association in @var{alist} has
1625a @sc{cdr} @code{eq} to @var{value}.
1626
1627@code{rassq} is like @code{assq} except that it compares the @sc{cdr} of
1628each @var{alist} association instead of the @sc{car}. You can think of
1629this as ``reverse @code{assq}'', finding the key for a given value.
1630
1631For example:
1632
1633@smallexample
1634(setq trees '((pine . cones) (oak . acorns) (maple . seeds)))
1635
1636(rassq 'acorns trees)
1637 @result{} (oak . acorns)
1638(rassq 'spores trees)
1639 @result{} nil
1640@end smallexample
1641
1642Note that @code{rassq} cannot search for a value stored in the @sc{car}
1643of the @sc{cdr} of an element:
1644
1645@smallexample
1646(setq colors '((rose red) (lily white) (buttercup yellow)))
1647
1648(rassq 'white colors)
1649 @result{} nil
1650@end smallexample
1651
1652In this case, the @sc{cdr} of the association @code{(lily white)} is not
1653the symbol @code{white}, but rather the list @code{(white)}. This
1654becomes clearer if the association is written in dotted pair notation:
1655
1656@smallexample
1657(lily white) @equiv{} (lily . (white))
1658@end smallexample
1659@end defun
1660
a9749dab 1661@defun assoc-default key alist &optional test default
a46dba07
RS
1662This function searches @var{alist} for a match for @var{key}. For each
1663element of @var{alist}, it compares the element (if it is an atom) or
1664the element's @sc{car} (if it is a cons) against @var{key}, by calling
1665@var{test} with two arguments: the element or its @sc{car}, and
1666@var{key}. The arguments are passed in that order so that you can get
1667useful results using @code{string-match} with an alist that contains
1668regular expressions (@pxref{Regexp Search}). If @var{test} is omitted
1669or @code{nil}, @code{equal} is used for comparison.
1670
1671If an alist element matches @var{key} by this criterion,
1672then @code{assoc-default} returns a value based on this element.
1673If the element is a cons, then the value is the element's @sc{cdr}.
1674Otherwise, the return value is @var{default}.
1675
1676If no alist element matches @var{key}, @code{assoc-default} returns
1677@code{nil}.
1678@end defun
1679
73804d4b
RS
1680@defun copy-alist alist
1681@cindex copying alists
1682This function returns a two-level deep copy of @var{alist}: it creates a
1683new copy of each association, so that you can alter the associations of
1684the new alist without changing the old one.
1685
1686@smallexample
1687@group
1688(setq needles-per-cluster
1689 '((2 . ("Austrian Pine" "Red Pine"))
2b3fc6c3 1690 (3 . ("Pitch Pine"))
ec221d13 1691@end group
2b3fc6c3 1692 (5 . ("White Pine"))))
73804d4b
RS
1693@result{}
1694((2 "Austrian Pine" "Red Pine")
2b3fc6c3
RS
1695 (3 "Pitch Pine")
1696 (5 "White Pine"))
73804d4b
RS
1697
1698(setq copy (copy-alist needles-per-cluster))
1699@result{}
1700((2 "Austrian Pine" "Red Pine")
2b3fc6c3
RS
1701 (3 "Pitch Pine")
1702 (5 "White Pine"))
73804d4b
RS
1703
1704(eq needles-per-cluster copy)
1705 @result{} nil
1706(equal needles-per-cluster copy)
1707 @result{} t
1708(eq (car needles-per-cluster) (car copy))
1709 @result{} nil
1710(cdr (car (cdr needles-per-cluster)))
2b3fc6c3 1711 @result{} ("Pitch Pine")
ec221d13 1712@group
73804d4b
RS
1713(eq (cdr (car (cdr needles-per-cluster)))
1714 (cdr (car (cdr copy))))
1715 @result{} t
1716@end group
3e099569 1717@end smallexample
2b3fc6c3
RS
1718
1719 This example shows how @code{copy-alist} makes it possible to change
1720the associations of one copy without affecting the other:
1721
3e099569 1722@smallexample
2b3fc6c3 1723@group
c74c521d 1724(setcdr (assq 3 copy) '("Martian Vacuum Pine"))
2b3fc6c3
RS
1725(cdr (assq 3 needles-per-cluster))
1726 @result{} ("Pitch Pine")
1727@end group
73804d4b
RS
1728@end smallexample
1729@end defun
1730
61b23410
DL
1731@defun assq-delete-all key alist
1732@tindex assq-delete-all
8241495d 1733This function deletes from @var{alist} all the elements whose @sc{car}
66fd2c72 1734is @code{eq} to @var{key}, much as if you used @code{delq} to delete
19017752 1735each such element one by one. It returns the shortened alist, and
66fd2c72
RS
1736often modifies the original list structure of @var{alist}. For
1737correct results, use the return value of @code{assq-delete-all} rather
1738than looking at the saved value of @var{alist}.
73804d4b 1739
8241495d 1740@example
66fd2c72
RS
1741(setq alist '((foo 1) (bar 2) (foo 3) (lose 4)))
1742 @result{} ((foo 1) (bar 2) (foo 3) (lose 4))
1743(assq-delete-all 'foo alist)
8241495d 1744 @result{} ((bar 2) (lose 4))
66fd2c72
RS
1745alist
1746 @result{} ((foo 1) (bar 2) (lose 4))
8241495d
RS
1747@end example
1748@end defun
ab5796a9
MB
1749
1750@ignore
1751 arch-tag: 31fb8a4e-4aa8-4a74-a206-aa00451394d4
1752@end ignore