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