]> code.delx.au - gnu-emacs/blob - lispref/lists.texi
Add.
[gnu-emacs] / lispref / lists.texi
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1998, 1999,
4 @c 2003, 2004
5 @c Free Software Foundation, Inc.
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
14 be any Lisp objects). The important difference between lists and
15 vectors is that two or more lists can share part of their structure; in
16 addition, you can insert or delete elements in a list without copying
17 the 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
36 @dfn{cons cells}. A cons cell is a data object that represents an
37 ordered 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},
39 and the other is known as the @sc{cdr}. (These names are traditional;
40 see @ref{Cons Cell Type}.) @sc{cdr} is pronounced ``could-er.''
41
42 We say that ``the @sc{car} of this cons cell is'' whatever object
43 its @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
46 cell refers to the next one. There is one cons cell for each element of
47 the list. By convention, the @sc{car}s of the cons cells hold the
48 elements 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
51 the @sc{car} and the @sc{cdr} is entirely a matter of convention; at the
52 level of cons cells, the @sc{car} and @sc{cdr} slots have the same
53 characteristics.
54
55 @cindex true list
56 Since @code{nil} is the conventional value to put in the @sc{cdr} of
57 the 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
60 symbol; 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
62 as its @sc{car}). Therefore, the @sc{cdr} of a true list is always a
63 true 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,
68 neither @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}
71 could point to one of the previous cons cells in the list. We call
72 that structure a @dfn{circular list}.
73
74 For some purposes, it does not matter whether a list is true,
75 circular or dotted. If the program doesn't look far enough down the
76 list to see the @sc{cdr} of the final cons cell, it won't care.
77 However, some functions that operate on lists demand true lists and
78 signal errors if given a dotted list. Most functions that try to find
79 the end of a list enter infinite loops if given a circular list.
80
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
84 cells.
85
86 The @sc{cdr} of any nonempty list @var{l} is a list containing all the
87 elements 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
97 represents the @sc{car} and the second box represents the @sc{cdr}.
98 Here is an illustration of the two-element list, @code{(tulip lily)},
99 made 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'',
112 ``points to'' or ``holds'' a Lisp object. (These terms are
113 synonymous.) The first box, which describes the @sc{car} of the first
114 cons 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
116 that the @sc{cdr} of the first cons cell is the second cons cell.
117
118 The same list can be illustrated in a different sort of box notation
119 like this:
120
121 @example
122 @group
123 --- --- --- ---
124 | | |--> | | |--> nil
125 --- --- --- ---
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
134 two-element list:
135
136 @example
137 @group
138 --- --- --- --- --- ---
139 | | |--> | | |--> | | |--> nil
140 --- --- --- --- --- ---
141 | | |
142 | | |
143 | --> oak --> maple
144 |
145 | --- --- --- ---
146 --> | | |--> | | |--> nil
147 --- --- --- ---
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
173 @xref{Cons Cell Type}, for the read and print syntax of cons cells and
174 lists, and for more ``box and arrow'' illustrations of lists.
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
180 cons 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
182 others, but they are used so often that it is worth having all of them.)
183
184 @defun consp object
185 This function returns @code{t} if @var{object} is a cons cell, @code{nil}
186 otherwise. @code{nil} is not a cons cell, although it @emph{is} a list.
187 @end defun
188
189 @defun atom object
190 @cindex atoms
191 This function returns @code{t} if @var{object} is an atom, @code{nil}
192 otherwise. 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
194 that is both.
195
196 @example
197 (atom @var{object}) @equiv{} (not (consp @var{object}))
198 @end example
199 @end defun
200
201 @defun listp object
202 This 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
218 This 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
227 This function returns @code{t} if @var{object} is @code{nil}, and
228 returns @code{nil} otherwise. This function is identical to @code{not},
229 but as a matter of clarity we use @code{null} when @var{object} is
230 considered 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
245 @need 2000
246
247 @node List Elements
248 @section Accessing Elements of Lists
249 @cindex list elements
250
251 @defun car cons-cell
252 This function returns the value referred to by the first slot of the
253 cons cell @var{cons-cell}. Expressed another way, this function
254 returns the @sc{car} of @var{cons-cell}.
255
256 As a special case, if @var{cons-cell} is @code{nil}, then @code{car}
257 is defined to return @code{nil}; therefore, any list is a valid argument
258 for @code{car}. An error is signaled if the argument is not a cons cell
259 or @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
274 This function returns the value referred to by the second slot of
275 the cons cell @var{cons-cell}. Expressed another way, this function
276 returns the @sc{cdr} of @var{cons-cell}.
277
278 As a special case, if @var{cons-cell} is @code{nil}, then @code{cdr}
279 is defined to return @code{nil}; therefore, any list is a valid argument
280 for @code{cdr}. An error is signaled if the argument is not a cons cell
281 or @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
296 This function lets you take the @sc{car} of a cons cell while avoiding
297 errors 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
299 to @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
314 This function lets you take the @sc{cdr} of a cons cell while
315 avoiding errors for other data types. It returns the @sc{cdr} of
316 @var{object} if @var{object} is a cons cell, @code{nil} otherwise.
317 This 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
332 @tindex pop
333 @defmac pop listname
334 This macro is a way of examining the @sc{car} of a list,
335 and taking it off the list, all at once. It is new in Emacs 21.
336
337 It operates on the list which is stored in the symbol @var{listname}.
338 It removes this element from the list by setting @var{listname}
339 to the @sc{cdr} of its old value---but it also returns the @sc{car}
340 of that list, which is the element being removed.
341
342 @example
343 x
344 @result{} (a b c)
345 (pop x)
346 @result{} a
347 x
348 @result{} (b c)
349 @end example
350 @end defmac
351
352 @defun nth n list
353 @anchor{Definition of nth}
354 This function returns the @var{n}th element of @var{list}. Elements
355 are numbered starting with zero, so the @sc{car} of @var{list} is
356 element number zero. If the length of @var{list} is @var{n} or less,
357 the value is @code{nil}.
358
359 If @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
378
379 The function @code{elt} is similar, but applies to any kind of sequence.
380 For historical reasons, it takes its arguments in the opposite order.
381 @xref{Sequence Functions}.
382 @end defun
383
384 @defun nthcdr n list
385 This function returns the @var{n}th @sc{cdr} of @var{list}. In other
386 words, it skips past the first @var{n} links of @var{list} and returns
387 what follows.
388
389 If @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
409 @defun last list &optional n
410 This function returns the last link of @var{list}. The @code{car} of
411 this 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}
414 if @var{n} is bigger than @var{list}'s length.
415 @end defun
416
417 @defun safe-length list
418 @anchor{Definition of safe-length}
419 This function returns the length of @var{list}, with no risk of either
420 an error or an infinite loop. It generally returns the number of
421 distinct cons cells in the list. However, for circular lists,
422 the value is just an upper bound; it is often too large.
423
424 If @var{list} is not @code{nil} or a cons cell, @code{safe-length}
425 returns 0.
426 @end defun
427
428 The most common way to compute the length of a list, when you are not
429 worried that it may be circular, is with @code{length}. @xref{Sequence
430 Functions}.
431
432 @defun caar cons-cell
433 This is the same as @code{(car (car @var{cons-cell}))}.
434 @end defun
435
436 @defun cadr cons-cell
437 This is the same as @code{(car (cdr @var{cons-cell}))}
438 or @code{(nth 1 @var{cons-cell})}.
439 @end defun
440
441 @defun cdar cons-cell
442 This is the same as @code{(cdr (car @var{cons-cell}))}.
443 @end defun
444
445 @defun cddr cons-cell
446 This is the same as @code{(cdr (cdr @var{cons-cell}))}
447 or @code{(nthcdr 2 @var{cons-cell})}.
448 @end defun
449
450 @defun butlast x &optional n
451 This function returns the list @var{x} with the last element,
452 or the last @var{n} elements, removed. If @var{n} is greater
453 than zero it makes a copy of the list so as not to damage the
454 original 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
459 This is a version of @code{butlast} that works by destructively
460 modifying the @code{cdr} of the appropriate element, rather than
461 making a copy of the list.
462 @end defun
463
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
472 interesting to note that @code{list} is used more times in the source
473 code for Emacs than @code{cons}.
474
475 @defun cons object1 object2
476 This function is the most basic function for building new list
477 structure. It creates a new cons cell, making @var{object1} the
478 @sc{car}, and @var{object2} the @sc{cdr}. It then returns the new
479 cons cell. The arguments @var{object1} and @var{object2} may be any
480 Lisp objects, but most often @var{object2} is a list.
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
499 list. This is called @dfn{consing the element onto the list}.
500 @footnote{There is no strictly equivalent way to add an element to
501 the 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}
503 and adding @var{newelt} to its end. Or you can use @code{(nconc
504 @var{listname} (list @var{newelt}))}, which modifies @var{listname}
505 by 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
507 list with @code{cons}, which neither copies nor modifies the list.}
508 For example:
509
510 @example
511 (setq list (cons newelt list))
512 @end example
513
514 Note that there is no conflict between the variable named @code{list}
515 used in this example and the function named @code{list} described below;
516 any symbol can serve both purposes.
517 @end defun
518
519 @tindex push
520 @defmac push newelt listname
521 This macro provides an alternative way to write
522 @code{(setq @var{listname} (cons @var{newelt} @var{listname}))}.
523 It is new in Emacs 21.
524
525 @example
526 (setq l '(a b))
527 @result{} (a b)
528 (push 'c l)
529 @result{} (c a b)
530 l
531 @result{} (c a b)
532 @end example
533 @end defmac
534
535 @defun list &rest objects
536 This function creates a list with @var{objects} as its elements. The
537 resulting list is always @code{nil}-terminated. If no @var{objects}
538 are 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
557 This function creates a list of @var{length} elements, in which each
558 element is @var{object}. Compare @code{make-list} with
559 @code{make-string} (@pxref{Creating Strings}).
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
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
576 @end example
577 @end defun
578
579 @defun append &rest sequences
580 @cindex copying lists
581 This function returns a list containing all the elements of
582 @var{sequences}. The @var{sequences} may be lists, vectors,
583 bool-vectors, or strings, but the last one should usually be a list.
584 All arguments except the last one are copied, so none of the arguments
585 is altered. (See @code{nconc} in @ref{Rearrangement}, for a way to join
586 lists with no copying.)
587
588 More generally, the final argument to @code{append} may be any Lisp
589 object. 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
591 is itself a list, then its elements become in effect elements of the
592 result list. If the final element is not a list, the result is a
593 dotted list since its final @sc{cdr} is not @code{nil} as required
594 in a true list.
595
596 In Emacs 20 and before, the @code{append} function also allowed
597 integers as (non last) arguments. It converted them to strings of
598 digits, making up the decimal print representation of the integer, and
599 then used the strings instead of the original integers. This obsolete
600 usage no longer works. The proper way to convert an integer to a
601 decimal number in this way is with @code{format} (@pxref{Formatting
602 Strings}) or @code{number-to-string} (@pxref{String Conversion}).
603 @end defun
604
605 Here is an example of using @code{append}:
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
616 trees
617 @result{} (pine oak)
618 more-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
627 You can see how @code{append} works by looking at a box diagram. The
628 variable @code{trees} is set to the list @code{(pine oak)} and then the
629 variable @code{more-trees} is set to the list @code{(maple birch pine
630 oak)}. However, the variable @code{trees} continues to refer to the
631 original list:
632
633 @smallexample
634 @group
635 more-trees trees
636 | |
637 | --- --- --- --- -> --- --- --- ---
638 --> | | |--> | | |--> | | |--> | | |--> nil
639 --- --- --- --- --- --- --- ---
640 | | | |
641 | | | |
642 --> maple -->birch --> pine --> oak
643 @end group
644 @end smallexample
645
646 An empty sequence contributes nothing to the value returned by
647 @code{append}. As a consequence of this, a final @code{nil} argument
648 forces a copy of the previous argument:
649
650 @example
651 @group
652 trees
653 @result{} (pine oak)
654 @end group
655 @group
656 (setq wood (append trees nil))
657 @result{} (pine oak)
658 @end group
659 @group
660 wood
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
670 This once was the usual way to copy a list, before the function
671 @code{copy-sequence} was invented. @xref{Sequences Arrays Vectors}.
672
673 Here we show the use of vectors and strings as arguments to @code{append}:
674
675 @example
676 @group
677 (append [a b] "cd" nil)
678 @result{} (a b 99 100)
679 @end group
680 @end example
681
682 With the help of @code{apply} (@pxref{Calling Functions}), we can append
683 all the lists in a list of lists:
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
692 If no @var{sequences} are given, @code{nil} is returned:
693
694 @example
695 @group
696 (append)
697 @result{} nil
698 @end group
699 @end example
700
701 Here are some examples where the final argument is not a list:
702
703 @example
704 (append '(x y) 'z)
705 @result{} (x y . z)
706 (append '(x y) [z])
707 @result{} (x y . [z])
708 @end example
709
710 @noindent
711 The second example shows that when the final argument is a sequence but
712 not a list, the sequence's elements do not become elements of the
713 resulting list. Instead, the sequence becomes the final @sc{cdr}, like
714 any other non-list final argument.
715
716 @defun reverse list
717 This 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)
729 x
730 @result{} (1 2 3 4)
731 @end group
732 @end example
733 @end defun
734
735 @defun copy-tree tree &optional vecp
736 This function returns a copy of the tree @code{tree}. If @var{tree} is a
737 cons 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
739 same way.
740
741 Normally, when @var{tree} is anything other than a cons cell,
742 @code{copy-tree} simply returns @var{tree}. However, if @var{vecp} is
743 non-@code{nil}, it copies vectors too (and operates recursively on
744 their elements).
745 @end defun
746
747 @defun number-sequence from &optional to separation
748 This returns a list of numbers starting with @var{from} and
749 incrementing by @var{separation}, and ending at or just before
750 @var{to}. @var{separation} can be positive or negative and defaults
751 to 1. If @var{to} is @code{nil} or numerically equal to @var{from},
752 the one element list @code{(from)} is returned. If @var{separation}
753 is 0 and @var{to} is neither @code{nil} nor numerically equal to
754 @var{from}, an error is signaled.
755
756 All arguments can be integers or floating point numbers. However,
757 floating point arguments can be tricky, because floating point
758 arithmetic is inexact. For instance, depending on the machine, it may
759 quite well happen that @code{(number-sequence 0.4 0.6 0.2)} returns
760 the one element list @code{(0.4)}, whereas
761 @code{(number-sequence 0.4 0.8 0.2)} returns a list with three
762 elements. The @var{n}th element of the list is computed by the exact
763 formula @code{(+ @var{from} (* @var{n} @var{separation}))}. Thus, if
764 one wants to make sure that @var{to} is included in the list, one can
765 pass an expression of this exact type for @var{to}. Alternatively,
766 one can replace @var{to} with a slightly larger value (or a slightly
767 more negative value if @var{separation} is negative).
768
769 Some examples:
770
771 @example
772 (number-sequence 4 9)
773 @result{} (4 5 6 7 8 9)
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
784 (number-sequence 1.5 6 2)
785 @result{} (1.5 3.5 5.5)
786 @end example
787 @end defun
788
789 @node Modifying Lists
790 @section Modifying Existing List Structure
791 @cindex destructive list operations
792
793 You can modify the @sc{car} and @sc{cdr} contents of a cons cell with the
794 primitives @code{setcar} and @code{setcdr}. We call these ``destructive''
795 operations because they change existing list structure.
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
803 way as @code{setcar} and @code{setcdr}, but the Common Lisp functions
804 return the cons cell while @code{setcar} and @code{setcdr} return the
805 new @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
818 Changing the @sc{car} of a cons cell is done with @code{setcar}. When
819 used on a list, @code{setcar} replaces one element of a list with a
820 different element.
821
822 @defun setcar cons object
823 This function stores @var{object} as the new @sc{car} of @var{cons},
824 replacing its previous @sc{car}. In other words, it changes the
825 @sc{car} slot of @var{cons} to refer to @var{object}. It returns the
826 value @var{object}. For example:
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
838 x
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,
845 storing a new @sc{car} into the cons changes one element of each of
846 these 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
861 x1 ; @r{Both lists are changed.}
862 @result{} (a foo c)
863 x2
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
871 x1 ; @r{Only one list is changed.}
872 @result{} (baz foo c)
873 x2
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
879 in the variables @code{x1} and @code{x2}, showing why replacing @code{b}
880 changes them both:
881
882 @example
883 @group
884 --- --- --- --- --- ---
885 x1---> | | |----> | | |--> | | |--> nil
886 --- --- --- --- --- ---
887 | --> | |
888 | | | |
889 --> a | --> b --> c
890 |
891 --- --- |
892 x2--> | | |--
893 --- ---
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
904 x1:
905 -------------- -------------- --------------
906 | car | cdr | | car | cdr | | car | cdr |
907 | a | o------->| b | o------->| c | nil |
908 | | | -->| | | | | |
909 -------------- | -------------- --------------
910 |
911 x2: |
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
926 This function stores @var{object} as the new @sc{cdr} of @var{cons},
927 replacing its previous @sc{cdr}. In other words, it changes the
928 @sc{cdr} slot of @var{cons} to refer to @var{object}. It returns the
929 value @var{object}.
930 @end defun
931
932 Here is an example of replacing the @sc{cdr} of a list with a
933 different list. All but the first element of the list are removed in
934 favor of a different sequence of elements. The first element is
935 unchanged, because it resides in the @sc{car} of the list, and is not
936 reached 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
948 x
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
955 the second element, @code{b}, from the list @code{(a b c)}, by changing
956 the @sc{cdr} of the first cons cell:
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)
964 x1
965 @result{} (a c)
966 @end group
967 @end example
968
969 @need 4000
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
985 The second cons cell, which previously held the element @code{b}, still
986 exists and its @sc{car} is still @code{b}, but it no longer forms part
987 of 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)
997 x1
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
1028 modifying the @sc{cdr}s of their component cons cells. We call these
1029 functions ``destructive'' because they chew up the original lists passed
1030 to them as arguments, relinking their cons cells to form a new list that
1031 is the returned value.
1032
1033 @ifnottex
1034 See @code{delq}, in @ref{Sets And Lists}, for another function
1035 that modifies cons cells.
1036 @end ifnottex
1037 @iftex
1038 The function @code{delq} in the following section is another example
1039 of destructive list manipulation.
1040 @end iftex
1041
1042 @defun nconc &rest lists
1043 @cindex concatenating lists
1044 @cindex joining lists
1045 This function returns a list containing all the elements of @var{lists}.
1046 Unlike @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
1061 x
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
1067 reasonable to use a constant list, such as @code{'(4 5)}, as in the
1068 above example. For the same reason, the last argument need not be a
1069 list:
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
1081 x
1082 @result{} (1 2 3 . z)
1083 @end group
1084 @end example
1085
1086 However, the other arguments (all but the last) must be lists.
1087
1088 A common pitfall is to use a quoted constant list as a non-last
1089 argument to @code{nconc}. If you do this, your program will change
1090 each 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}.
1126 Unlike @code{reverse}, @code{nreverse} alters its argument by reversing
1127 the @sc{cdr}s in the cons cells forming the list. The cons cell that
1128 used to be the last one in @var{list} becomes the first cons cell of the
1129 value.
1130
1131 For example:
1132
1133 @example
1134 @group
1135 (setq x '(a b c))
1136 @result{} (a b c)
1137 @end group
1138 @group
1139 x
1140 @result{} (a b c)
1141 (nreverse x)
1142 @result{} (c b a)
1143 @end group
1144 @group
1145 ;; @r{The cons cell that was first is now last.}
1146 x
1147 @result{} (a)
1148 @end group
1149 @end example
1150
1151 To avoid confusion, we usually store the result of @code{nreverse}
1152 back 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)},
1159 presented 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
1178 This function sorts @var{list} stably, though destructively, and
1179 returns the sorted list. It compares elements using @var{predicate}. A
1180 stable sort is one in which elements with equal sort keys maintain their
1181 relative order before and after the sort. Stability is important when
1182 successive sorts are used to order elements according to different
1183 criteria.
1184
1185 The argument @var{predicate} must be a function that accepts two
1186 arguments. It is called with two elements of @var{list}. To get an
1187 increasing order sort, the @var{predicate} should return @code{t} if the
1188 first element is ``less than'' the second, or @code{nil} if not.
1189
1190 The comparison function @var{predicate} must give reliable results for
1191 any 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
1193 less 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}
1195 is less than @var{c}, then @var{a} must be less than @var{c}. If you
1196 use a comparison function which does not meet these requirements, the
1197 result of @code{sort} is unpredictable.
1198
1199 The destructive aspect of @code{sort} is that it rearranges the cons
1200 cells forming @var{list} by changing @sc{cdr}s. A nondestructive sort
1201 function would create new cons cells to store the elements in their
1202 sorted order. If you wish to make a sorted copy without destroying the
1203 original, copy it first with @code{copy-sequence} and then sort.
1204
1205 Sorting does not change the @sc{car}s of the cons cells in @var{list};
1206 the 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
1208 appears 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
1221 nums
1222 @result{} (1 2 3 4 5 6)
1223 @end group
1224 @end example
1225
1226 @noindent
1227 @strong{Warning}: Note that the list in @code{nums} no longer contains
1228 0; this is the same cons cell that it was before, but it is no longer
1229 the first one in the list. Don't assume a variable that formerly held
1230 the argument now holds the entire sorted list! Instead, save the result
1231 of @code{sort} and use that. Most often we store the result back into
1232 the variable that held the original list:
1233
1234 @example
1235 (setq nums (sort nums '<))
1236 @end example
1237
1238 @xref{Sorting}, for more functions that perform sorting.
1239 See @code{documentation} in @ref{Accessing Documentation}, for a
1240 useful example of @code{sort}.
1241 @end defun
1242
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
1249 value an element of a set if it appears in the list, and ignore the
1250 order of the list. To form the union of two sets, use @code{append} (as
1251 long as you don't mind having duplicate elements). You can remove
1252 @code{equal} duplicates using @code{delete-dups}. Other useful
1253 functions for sets include @code{memq} and @code{delq}, and their
1254 @code{equal} versions, @code{member} and @code{delete}.
1255
1256 @cindex CL note---lack @code{union}, @code{intersection}
1257 @quotation
1258 @b{Common Lisp note:} Common Lisp has functions @code{union} (which
1259 avoids duplicate elements) and @code{intersection} for set operations,
1260 but GNU Emacs Lisp does not have them. You can write them in Lisp if
1261 you wish.
1262 @end quotation
1263
1264 @defun memq object list
1265 @cindex membership in a list
1266 This 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
1268 first occurrence of @var{object}. Otherwise, it returns @code{nil}.
1269 The letter @samp{q} in @code{memq} says that it uses @code{eq} to
1270 compare @var{object} against the elements of the list. For example:
1271
1272 @example
1273 @group
1274 (memq 'b '(a b c b a))
1275 @result{} (b c b a)
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
1286 This function destructively removes all elements @code{eq} to
1287 @var{object} from @var{list}. The letter @samp{q} in @code{delq} says
1288 that it uses @code{eq} to compare @var{object} against the elements of
1289 the list, like @code{memq} and @code{remq}.
1290 @end defun
1291
1292 When @code{delq} deletes elements from the front of the list, it does so
1293 simply by advancing down the list and returning a sublist that starts
1294 after 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
1302 When an element to be deleted appears in the middle of the list,
1303 removing it involves changing the @sc{cdr}s (@pxref{Setcdr}).
1304
1305 @example
1306 @group
1307 (setq sample-list '(a b c (4)))
1308 @result{} (a b c (4))
1309 @end group
1310 @group
1311 (delq 'a sample-list)
1312 @result{} (b c (4))
1313 @end group
1314 @group
1315 sample-list
1316 @result{} (a b c (4))
1317 @end group
1318 @group
1319 (delq 'c sample-list)
1320 @result{} (a b (4))
1321 @end group
1322 @group
1323 sample-list
1324 @result{} (a b (4))
1325 @end group
1326 @end example
1327
1328 Note that @code{(delq 'c sample-list)} modifies @code{sample-list} to
1329 splice out the third element, but @code{(delq 'a sample-list)} does not
1330 splice anything---it just returns a shorter list. Don't assume that a
1331 variable which formerly held the argument @var{list} now has fewer
1332 elements, or that it still holds the original list! Instead, save the
1333 result of @code{delq} and use that. Most often we store the result back
1334 into the variable that held the original list:
1335
1336 @example
1337 (setq flowers (delq 'rose flowers))
1338 @end example
1339
1340 In the following example, the @code{(4)} that @code{delq} attempts to match
1341 and the @code{(4)} in the @code{sample-list} are not @code{eq}:
1342
1343 @example
1344 @group
1345 (delq '(4) sample-list)
1346 @result{} (a c (4))
1347 @end group
1348 @end example
1349
1350 @defun remq object list
1351 This function returns a copy of @var{list}, with all elements removed
1352 which are @code{eq} to @var{object}. The letter @samp{q} in @code{remq}
1353 says that it uses @code{eq} to compare @var{object} against the elements
1354 of @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
1366 sample-list
1367 @result{} (a b c a b c)
1368 @end group
1369 @end example
1370 @noindent
1371 The function @code{delq} offers a way to perform this operation
1372 destructively. See @ref{Sets And Lists}.
1373 @end defun
1374
1375 The following three functions are like @code{memq}, @code{delq} and
1376 @code{remq}, but use @code{equal} rather than @code{eq} to compare
1377 elements. @xref{Equality Predicates}.
1378
1379 @defun member object list
1380 The function @code{member} tests to see whether @var{object} is a member
1381 of @var{list}, comparing members with @var{object} using @code{equal}.
1382 If @var{object} is a member, @code{member} returns a list starting with
1383 its first occurrence in @var{list}. Otherwise, it returns @code{nil}.
1384
1385 Compare 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
1404 @defun delete object sequence
1405 If @code{sequence} is a list, this function destructively removes all
1406 elements @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
1408 uses @code{equal} to compare elements with @var{object}, like
1409 @code{member}; when it finds an element that matches, it removes the
1410 element just as @code{delq} would.
1411
1412 If @code{sequence} is a vector or string, @code{delete} returns a copy
1413 of @code{sequence} with all elements @code{equal} to @code{object}
1414 removed.
1415
1416 For example:
1417
1418 @example
1419 @group
1420 (delete '(2) '((2) (1) (2)))
1421 @result{} ((1))
1422 @end group
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
1431 This function is the non-destructive counterpart of @code{delete}. If
1432 returns a copy of @code{sequence}, a list, vector, or string, with
1433 elements @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
1444 @end example
1445 @end defun
1446
1447 @quotation
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
1450 Lisp. The Common Lisp versions do not use @code{equal} to compare
1451 elements.
1452 @end quotation
1453
1454 @defun member-ignore-case object list
1455 This function is like @code{member}, except that @var{object} should
1456 be a string and that it ignores differences in letter-case and text
1457 representation: upper-case and lower-case letters are treated as
1458 equal, and unibyte strings are converted to multibyte prior to
1459 comparison.
1460 @end defun
1461
1462 @defun delete-dups list
1463 This function destructively removes all @code{equal} duplicates from
1464 @var{list}, stores the result in @var{list} and returns it. Of
1465 several @code{equal} occurrences of an element in @var{list},
1466 @code{delete-dups} keeps the first one.
1467 @end defun
1468
1469 See also the function @code{add-to-list}, in @ref{Setting Variables},
1470 for another way to add an element to a list stored in a variable.
1471
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
1478 from keys to values. It is a list of cons cells called
1479 @dfn{associations}: the @sc{car} of each cons cell is the @dfn{key}, and the
1480 @sc{cdr} is the @dfn{associated value}.@footnote{This usage of ``key''
1481 is not related to the term ``key sequence''; it means a value used to
1482 look up an item in a table. In this case, the table is the alist, and
1483 the alist associations are the items.}
1484
1485 Here is an example of an alist. The key @code{pine} is associated with
1486 the 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
1491 ((pine . cones)
1492 (oak . acorns)
1493 (maple . seeds))
1494 @end group
1495 @end example
1496
1497 The associated values in an alist may be any Lisp objects; so may the
1498 keys. For example, in the following alist, the symbol @code{a} is
1499 associated with the number @code{1}, and the string @code{"b"} is
1500 associated with the @emph{list} @code{(2 3)}, which is the @sc{cdr} of
1501 the 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
1508 value in the @sc{car} of the @sc{cdr} of the element. Here is an
1509 example of such an alist:
1510
1511 @example
1512 ((rose red) (lily white) (buttercup yellow))
1513 @end example
1514
1515 @noindent
1516 Here we regard @code{red} as the value associated with @code{rose}. One
1517 advantage of this kind of alist is that you can store other related
1518 information---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
1520 below) to find the element containing a given value. When neither of
1521 these considerations is important, the choice is a matter of taste, as
1522 long 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
1525 associated value in the @sc{cdr} of the element; the value associated
1526 with @code{rose} would be the list @code{(red)}.
1527
1528 Association lists are often used to record information that you might
1529 otherwise keep on a stack, since new associations may be added easily to
1530 the front of the list. When searching an association list for an
1531 association with a given key, the first one found is returned, if there
1532 is more than one.
1533
1534 In Emacs Lisp, it is @emph{not} an error if an element of an
1535 association list is not a cons cell. The alist search functions simply
1536 ignore such elements. Many other versions of Lisp signal errors in such
1537 cases.
1538
1539 Note that property lists are similar to association lists in several
1540 respects. A property list behaves like an association list in which
1541 each key can occur only once. @xref{Property Lists}, for a comparison
1542 of property lists and association lists.
1543
1544 @defun assoc key alist
1545 This 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
1548 association in @var{alist} has a @sc{car} @code{equal} to @var{key}.
1549 For 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
1562 Here is another example, in which the keys and values are not symbols:
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
1577 The function @code{assoc-string} is much like @code{assoc} except
1578 that it ignores certain differences between strings. @xref{Text
1579 Comparison}.
1580
1581 @defun rassoc value alist
1582 This function returns the first association with value @var{value} in
1583 @var{alist}. It returns @code{nil} if no association in @var{alist} has
1584 a @sc{cdr} @code{equal} to @var{value}.
1585
1586 @code{rassoc} is like @code{assoc} except that it compares the @sc{cdr} of
1587 each @var{alist} association instead of the @sc{car}. You can think of
1588 this as ``reverse @code{assoc}'', finding the key for a given value.
1589 @end defun
1590
1591 @defun assq key alist
1592 This function is like @code{assoc} in that it returns the first
1593 association for @var{key} in @var{alist}, but it makes the comparison
1594 using @code{eq} instead of @code{equal}. @code{assq} returns @code{nil}
1595 if no association in @var{alist} has a @sc{car} @code{eq} to @var{key}.
1596 This function is used more often than @code{assoc}, since @code{eq} is
1597 faster 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
1607 On the other hand, @code{assq} is not usually useful in alists where the
1608 keys 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
1623 This function returns the first association with value @var{value} in
1624 @var{alist}. It returns @code{nil} if no association in @var{alist} has
1625 a @sc{cdr} @code{eq} to @var{value}.
1626
1627 @code{rassq} is like @code{assq} except that it compares the @sc{cdr} of
1628 each @var{alist} association instead of the @sc{car}. You can think of
1629 this as ``reverse @code{assq}'', finding the key for a given value.
1630
1631 For 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
1642 Note that @code{rassq} cannot search for a value stored in the @sc{car}
1643 of 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
1652 In this case, the @sc{cdr} of the association @code{(lily white)} is not
1653 the symbol @code{white}, but rather the list @code{(white)}. This
1654 becomes 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
1661 @defun assoc-default key alist &optional test default
1662 This function searches @var{alist} for a match for @var{key}. For each
1663 element of @var{alist}, it compares the element (if it is an atom) or
1664 the 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
1667 useful results using @code{string-match} with an alist that contains
1668 regular expressions (@pxref{Regexp Search}). If @var{test} is omitted
1669 or @code{nil}, @code{equal} is used for comparison.
1670
1671 If an alist element matches @var{key} by this criterion,
1672 then @code{assoc-default} returns a value based on this element.
1673 If the element is a cons, then the value is the element's @sc{cdr}.
1674 Otherwise, the return value is @var{default}.
1675
1676 If no alist element matches @var{key}, @code{assoc-default} returns
1677 @code{nil}.
1678 @end defun
1679
1680 @defun copy-alist alist
1681 @cindex copying alists
1682 This function returns a two-level deep copy of @var{alist}: it creates a
1683 new copy of each association, so that you can alter the associations of
1684 the new alist without changing the old one.
1685
1686 @smallexample
1687 @group
1688 (setq needles-per-cluster
1689 '((2 . ("Austrian Pine" "Red Pine"))
1690 (3 . ("Pitch Pine"))
1691 @end group
1692 (5 . ("White Pine"))))
1693 @result{}
1694 ((2 "Austrian Pine" "Red Pine")
1695 (3 "Pitch Pine")
1696 (5 "White Pine"))
1697
1698 (setq copy (copy-alist needles-per-cluster))
1699 @result{}
1700 ((2 "Austrian Pine" "Red Pine")
1701 (3 "Pitch Pine")
1702 (5 "White Pine"))
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)))
1711 @result{} ("Pitch Pine")
1712 @group
1713 (eq (cdr (car (cdr needles-per-cluster)))
1714 (cdr (car (cdr copy))))
1715 @result{} t
1716 @end group
1717 @end smallexample
1718
1719 This example shows how @code{copy-alist} makes it possible to change
1720 the associations of one copy without affecting the other:
1721
1722 @smallexample
1723 @group
1724 (setcdr (assq 3 copy) '("Martian Vacuum Pine"))
1725 (cdr (assq 3 needles-per-cluster))
1726 @result{} ("Pitch Pine")
1727 @end group
1728 @end smallexample
1729 @end defun
1730
1731 @defun assq-delete-all key alist
1732 @tindex assq-delete-all
1733 This function deletes from @var{alist} all the elements whose @sc{car}
1734 is @code{eq} to @var{key}, much as if you used @code{delq} to delete
1735 each such element one by one. It returns the shortened alist, and
1736 often modifies the original list structure of @var{alist}. For
1737 correct results, use the return value of @code{assq-delete-all} rather
1738 than looking at the saved value of @var{alist}.
1739
1740 @example
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)
1744 @result{} ((bar 2) (lose 4))
1745 alist
1746 @result{} ((foo 1) (bar 2) (lose 4))
1747 @end example
1748 @end defun
1749
1750 @ignore
1751 arch-tag: 31fb8a4e-4aa8-4a74-a206-aa00451394d4
1752 @end ignore