In doc, use standard American English style for e.g., etc., i.e.
[bpt/emacs.git] / doc / misc / cl.texi
CommitLineData
4009494e 1\input texinfo @c -*-texinfo-*-
db78a8cb 2@setfilename ../../info/cl
4009494e 3@settitle Common Lisp Extensions
8d6510b9 4@include emacsver.texi
4009494e
GM
5
6@copying
7This file documents the GNU Emacs Common Lisp emulation package.
8
ab422c4d 9Copyright @copyright{} 1993, 2001--2013 Free Software Foundation, Inc.
4009494e
GM
10
11@quotation
12Permission is granted to copy, distribute and/or modify this document
6a2c4aec 13under the terms of the GNU Free Documentation License, Version 1.3 or
4009494e 14any later version published by the Free Software Foundation; with no
debf4439
GM
15Invariant Sections, with the Front-Cover texts being ``A GNU Manual'',
16and with the Back-Cover Texts as in (a) below. A copy of the license
17is included in the section entitled ``GNU Free Documentation License''.
4009494e 18
6f093307 19(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
6bf430d1 20modify this GNU manual.''
4009494e
GM
21@end quotation
22@end copying
23
0c973505 24@dircategory Emacs lisp libraries
4009494e 25@direntry
9360256a 26* CL: (cl). Partial Common Lisp support for Emacs Lisp.
4009494e
GM
27@end direntry
28
29@finalout
30
31@titlepage
32@sp 6
33@center @titlefont{Common Lisp Extensions}
34@sp 4
35@center For GNU Emacs Lisp
36@sp 1
8d6510b9 37@center as distributed with Emacs @value{EMACSVER}
4009494e
GM
38@sp 5
39@center Dave Gillespie
40@center daveg@@synaptics.com
41@page
42@vskip 0pt plus 1filll
43@insertcopying
44@end titlepage
45
5dc584b5
KB
46@contents
47
5dc584b5 48@ifnottex
1d5b82ef
GM
49@node Top
50@top GNU Emacs Common Lisp Emulation
51
5dc584b5
KB
52@insertcopying
53@end ifnottex
54
4009494e 55@menu
df43dd53
GM
56* Overview:: Basics, usage, organization, naming conventions.
57* Program Structure:: Arglists, @code{cl-eval-when}.
58* Predicates:: Type predicates and equality predicates.
59* Control Structure:: Assignment, conditionals, blocks, looping.
60* Macros:: Destructuring, compiler macros.
8d6510b9 61* Declarations:: @code{cl-proclaim}, @code{cl-declare}, etc.
df43dd53 62* Symbols:: Property lists, creating symbols.
8d6510b9
GM
63* Numbers:: Predicates, functions, random numbers.
64* Sequences:: Mapping, functions, searching, sorting.
df43dd53 65* Lists:: Functions, substitution, sets, associations.
8d6510b9 66* Structures:: @code{cl-defstruct}.
df43dd53 67* Assertions:: Assertions and type checking.
4009494e 68
df43dd53
GM
69Appendices
70* Efficiency Concerns:: Hints and techniques.
71* Common Lisp Compatibility:: All known differences with Steele.
72* Porting Common Lisp:: Hints for porting Common Lisp code.
73* Obsolete Features:: Obsolete features.
4009494e 74* GNU Free Documentation License:: The license for this documentation.
df43dd53
GM
75
76Indexes
77* Function Index:: An entry for each documented function.
78* Variable Index:: An entry for each documented variable.
4009494e
GM
79@end menu
80
1d5b82ef 81@node Overview
4009494e 82@chapter Overview
4009494e
GM
83
84@noindent
1d5b82ef
GM
85This document describes a set of Emacs Lisp facilities borrowed from
86Common Lisp. All the facilities are described here in detail. While
87this document does not assume any prior knowledge of Common Lisp, it
88does assume a basic familiarity with Emacs Lisp.
89
4009494e
GM
90Common Lisp is a huge language, and Common Lisp systems tend to be
91massive and extremely complex. Emacs Lisp, by contrast, is rather
92minimalist in the choice of Lisp features it offers the programmer.
93As Emacs Lisp programmers have grown in number, and the applications
94they write have grown more ambitious, it has become clear that Emacs
95Lisp could benefit from many of the conveniences of Common Lisp.
96
df43dd53 97The @dfn{CL} package adds a number of Common Lisp functions and
4009494e 98control structures to Emacs Lisp. While not a 100% complete
df43dd53 99implementation of Common Lisp, it adds enough functionality
4009494e
GM
100to make Emacs Lisp programming significantly more convenient.
101
4009494e
GM
102Some Common Lisp features have been omitted from this package
103for various reasons:
104
105@itemize @bullet
106@item
107Some features are too complex or bulky relative to their benefit
108to Emacs Lisp programmers. CLOS and Common Lisp streams are fine
2027b1b3
GM
109examples of this group. (The separate package EIEIO implements
110a subset of CLOS functionality. @xref{Top, , Introduction, eieio, EIEIO}.)
4009494e
GM
111
112@item
113Other features cannot be implemented without modification to the
114Emacs Lisp interpreter itself, such as multiple return values,
8d6510b9 115case-insensitive symbols, and complex numbers.
df43dd53 116This package generally makes no attempt to emulate these features.
4009494e 117
4009494e
GM
118@end itemize
119
a05cb6e3
GM
120This package was originally written by Dave Gillespie,
121@file{daveg@@synaptics.com}, as a total rewrite of an earlier 1986
122@file{cl.el} package by Cesar Quiroz. Care has been taken to ensure
123that each function is defined efficiently, concisely, and with minimal
124impact on the rest of the Emacs environment. Stefan Monnier added the
125file @file{cl-lib.el} and rationalized the namespace for Emacs 24.3.
4009494e
GM
126
127@menu
df43dd53 128* Usage:: How to use this package.
a05cb6e3 129* Organization:: The package's component files.
df43dd53 130* Naming Conventions:: Notes on function names.
4009494e
GM
131@end menu
132
1d5b82ef 133@node Usage
4009494e
GM
134@section Usage
135
136@noindent
df43dd53 137This package is distributed with Emacs, so there is no need
8d6510b9 138to install any additional files in order to start using it. Lisp code
df43dd53 139that uses features from this package should simply include at
8d6510b9 140the beginning:
4009494e
GM
141
142@example
8d6510b9 143(require 'cl-lib)
4009494e
GM
144@end example
145
146@noindent
8d6510b9 147You may wish to add such a statement to your init file, if you
df43dd53 148make frequent use of features from this package.
4009494e 149
1d5b82ef 150@node Organization
4009494e
GM
151@section Organization
152
153@noindent
8d6510b9 154The Common Lisp package is organized into four main files:
4009494e
GM
155
156@table @file
8d6510b9
GM
157@item cl-lib.el
158This is the main file, which contains basic functions
159and information about the package. This file is relatively compact.
4009494e
GM
160
161@item cl-extra.el
162This file contains the larger, more complex or unusual functions.
163It is kept separate so that packages which only want to use Common
8d6510b9 164Lisp fundamentals like the @code{cl-incf} function won't need to pay
4009494e
GM
165the overhead of loading the more advanced functions.
166
167@item cl-seq.el
168This file contains most of the advanced functions for operating
8d6510b9 169on sequences or lists, such as @code{cl-delete-if} and @code{cl-assoc}.
4009494e
GM
170
171@item cl-macs.el
8d6510b9
GM
172This file contains the features that are macros instead of functions.
173Macros expand when the caller is compiled, not when it is run, so the
174macros generally only need to be present when the byte-compiler is
175running (or when the macros are used in uncompiled code). Most of the
176macros of this package are isolated in @file{cl-macs.el} so that they
177won't take up memory unless you are compiling.
4009494e
GM
178@end table
179
8d6510b9 180The file @file{cl-lib.el} includes all necessary @code{autoload}
4009494e 181commands for the functions and macros in the other three files.
8d6510b9 182All you have to do is @code{(require 'cl-lib)}, and @file{cl-lib.el}
4009494e
GM
183will take care of pulling in the other files when they are
184needed.
185
d3094168 186There is another file, @file{cl.el}, which was the main entry point to
df43dd53 187this package prior to Emacs 24.3. Nowadays, it is replaced by
d3094168
GM
188@file{cl-lib.el}. The two provide the same features (in most cases),
189but use different function names (in fact, @file{cl.el} mainly just
190defines aliases to the @file{cl-lib.el} definitions). Where
191@file{cl-lib.el} defines a function called, for example,
192@code{cl-incf}, @file{cl.el} uses the same name but without the
1df7defd 193@samp{cl-} prefix, e.g., @code{incf} in this example. There are a few
d3094168
GM
194exceptions to this. First, functions such as @code{cl-defun} where
195the unprefixed version was already used for a standard Emacs Lisp
196function. In such cases, the @file{cl.el} version adds a @samp{*}
1df7defd 197suffix, e.g., @code{defun*}. Second, there are some obsolete features
d3094168
GM
198that are only implemented in @file{cl.el}, not in @file{cl-lib.el},
199because they are replaced by other standard Emacs Lisp features.
200Finally, in a very few cases the old @file{cl.el} versions do not
201behave in exactly the same way as the @file{cl-lib.el} versions.
202@xref{Obsolete Features}.
f43a5263
GM
203@c There is also cl-mapc, which was called cl-mapc even before cl-lib.el.
204@c But not autoloaded, so maybe not much used?
d3094168
GM
205
206Since the old @file{cl.el} does not use a clean namespace, Emacs has a
207policy that packages distributed with Emacs must not load @code{cl} at
208run time. (It is ok for them to load @code{cl} at @emph{compile}
209time, with @code{eval-when-compile}, and use the macros it provides.)
210There is no such restriction on the use of @code{cl-lib}. New code
211should use @code{cl-lib} rather than @code{cl}.
8d6510b9
GM
212
213There is one more file, @file{cl-compat.el}, which defines some
df43dd53 214routines from the older Quiroz @file{cl.el} package that are not otherwise
a6880551
GM
215present in the new package. This file is obsolete and should not be
216used in new code.
4009494e 217
1d5b82ef 218@node Naming Conventions
4009494e
GM
219@section Naming Conventions
220
221@noindent
222Except where noted, all functions defined by this package have the
8d6510b9
GM
223same calling conventions as their Common Lisp counterparts, and
224names that are those of Common Lisp plus a @samp{cl-} prefix.
4009494e
GM
225
226Internal function and variable names in the package are prefixed
8d6510b9 227by @code{cl--}. Here is a complete list of functions prefixed by
df43dd53 228@code{cl-} that were @emph{not} taken from Common Lisp:
4009494e
GM
229
230@example
df43dd53 231cl-callf cl-callf2 cl-defsubst
7fbf8f7b 232cl-letf cl-letf*
4009494e
GM
233@end example
234
df43dd53
GM
235@c This is not uninteresting I suppose, but is of zero practical relevance
236@c to the user, and seems like a hostage to changing implementation details.
8d6510b9 237The following simple functions and macros are defined in @file{cl-lib.el};
4009494e
GM
238they do not cause other components like @file{cl-extra} to be loaded.
239
240@example
df43dd53 241cl-evenp cl-oddp cl-minusp
7fbf8f7b 242cl-plusp cl-endp cl-subst
df43dd53
GM
243cl-copy-list cl-list* cl-ldiff
244cl-rest cl-decf [1] cl-incf [1]
245cl-acons cl-adjoin [2] cl-pairlis
246cl-pushnew [1,2] cl-declaim cl-proclaim
247cl-caaar@dots{}cl-cddddr cl-first@dots{}cl-tenth
7fbf8f7b 248cl-mapcar [3]
4009494e
GM
249@end example
250
251@noindent
df43dd53 252[1] Only when @var{place} is a plain variable name.
4009494e
GM
253
254@noindent
df43dd53 255[2] Only if @code{:test} is @code{eq}, @code{equal}, or unspecified,
4009494e
GM
256and @code{:key} is not used.
257
258@noindent
df43dd53 259[3] Only for one sequence argument or two list arguments.
4009494e 260
1d5b82ef 261@node Program Structure
4009494e
GM
262@chapter Program Structure
263
264@noindent
df43dd53 265This section describes features of this package that have to
4009494e 266do with programs as a whole: advanced argument lists for functions,
8d6510b9 267and the @code{cl-eval-when} construct.
4009494e
GM
268
269@menu
8d6510b9
GM
270* Argument Lists:: @code{&key}, @code{&aux}, @code{cl-defun}, @code{cl-defmacro}.
271* Time of Evaluation:: The @code{cl-eval-when} construct.
4009494e
GM
272@end menu
273
1d5b82ef 274@node Argument Lists
4009494e
GM
275@section Argument Lists
276
277@noindent
278Emacs Lisp's notation for argument lists of functions is a subset of
279the Common Lisp notation. As well as the familiar @code{&optional}
280and @code{&rest} markers, Common Lisp allows you to specify default
281values for optional arguments, and it provides the additional markers
282@code{&key} and @code{&aux}.
283
284Since argument parsing is built-in to Emacs, there is no way for
285this package to implement Common Lisp argument lists seamlessly.
286Instead, this package defines alternates for several Lisp forms
287which you must use if you need Common Lisp argument lists.
288
df43dd53 289@defmac cl-defun name arglist body@dots{}
4009494e
GM
290This form is identical to the regular @code{defun} form, except
291that @var{arglist} is allowed to be a full Common Lisp argument
292list. Also, the function body is enclosed in an implicit block
293called @var{name}; @pxref{Blocks and Exits}.
e1117425 294@end defmac
4009494e 295
df43dd53 296@defmac cl-defsubst name arglist body@dots{}
8d6510b9 297This is just like @code{cl-defun}, except that the function that
4009494e
GM
298is defined is automatically proclaimed @code{inline}, i.e.,
299calls to it may be expanded into in-line code by the byte compiler.
300This is analogous to the @code{defsubst} form;
8d6510b9 301@code{cl-defsubst} uses a different method (compiler macros) which
da0bbbc4 302works in all versions of Emacs, and also generates somewhat more
7fbf8f7b
GM
303@c For some examples,
304@c see http://lists.gnu.org/archive/html/emacs-devel/2012-11/msg00009.html
8d6510b9 305efficient inline expansions. In particular, @code{cl-defsubst}
4009494e
GM
306arranges for the processing of keyword arguments, default values,
307etc., to be done at compile-time whenever possible.
e1117425 308@end defmac
4009494e 309
df43dd53 310@defmac cl-defmacro name arglist body@dots{}
4009494e
GM
311This is identical to the regular @code{defmacro} form,
312except that @var{arglist} is allowed to be a full Common Lisp
313argument list. The @code{&environment} keyword is supported as
9f2881af
GM
314described in Steele's book @cite{Common Lisp, the Language}.
315The @code{&whole} keyword is supported only
4009494e
GM
316within destructured lists (see below); top-level @code{&whole}
317cannot be implemented with the current Emacs Lisp interpreter.
318The macro expander body is enclosed in an implicit block called
319@var{name}.
e1117425 320@end defmac
4009494e 321
e1117425 322@defmac cl-function symbol-or-lambda
4009494e
GM
323This is identical to the regular @code{function} form,
324except that if the argument is a @code{lambda} form then that
325form may use a full Common Lisp argument list.
e1117425 326@end defmac
4009494e 327
8d6510b9 328Also, all forms (such as @code{cl-flet} and @code{cl-labels}) defined
4009494e
GM
329in this package that include @var{arglist}s in their syntax allow
330full Common Lisp argument lists.
331
8d6510b9 332Note that it is @emph{not} necessary to use @code{cl-defun} in
df43dd53 333order to have access to most CL features in your function.
8d6510b9 334These features are always present; @code{cl-defun}'s only
4009494e
GM
335difference from @code{defun} is its more flexible argument
336lists and its implicit block.
337
338The full form of a Common Lisp argument list is
339
340@example
df43dd53
GM
341(@var{var}@dots{}
342 &optional (@var{var} @var{initform} @var{svar})@dots{}
4009494e 343 &rest @var{var}
df43dd53
GM
344 &key ((@var{keyword} @var{var}) @var{initform} @var{svar})@dots{}
345 &aux (@var{var} @var{initform})@dots{})
4009494e
GM
346@end example
347
348Each of the five argument list sections is optional. The @var{svar},
349@var{initform}, and @var{keyword} parts are optional; if they are
350omitted, then @samp{(@var{var})} may be written simply @samp{@var{var}}.
351
352The first section consists of zero or more @dfn{required} arguments.
353These arguments must always be specified in a call to the function;
354there is no difference between Emacs Lisp and Common Lisp as far as
355required arguments are concerned.
356
357The second section consists of @dfn{optional} arguments. These
358arguments may be specified in the function call; if they are not,
359@var{initform} specifies the default value used for the argument.
360(No @var{initform} means to use @code{nil} as the default.) The
361@var{initform} is evaluated with the bindings for the preceding
362arguments already established; @code{(a &optional (b (1+ a)))}
363matches one or two arguments, with the second argument defaulting
364to one plus the first argument. If the @var{svar} is specified,
365it is an auxiliary variable which is bound to @code{t} if the optional
366argument was specified, or to @code{nil} if the argument was omitted.
367If you don't use an @var{svar}, then there will be no way for your
368function to tell whether it was called with no argument, or with
369the default value passed explicitly as an argument.
370
371The third section consists of a single @dfn{rest} argument. If
372more arguments were passed to the function than are accounted for
373by the required and optional arguments, those extra arguments are
374collected into a list and bound to the ``rest'' argument variable.
375Common Lisp's @code{&rest} is equivalent to that of Emacs Lisp.
376Common Lisp accepts @code{&body} as a synonym for @code{&rest} in
377macro contexts; this package accepts it all the time.
378
379The fourth section consists of @dfn{keyword} arguments. These
380are optional arguments which are specified by name rather than
381positionally in the argument list. For example,
382
383@example
8d6510b9 384(cl-defun foo (a &optional b &key c d (e 17)))
4009494e
GM
385@end example
386
387@noindent
388defines a function which may be called with one, two, or more
389arguments. The first two arguments are bound to @code{a} and
390@code{b} in the usual way. The remaining arguments must be
391pairs of the form @code{:c}, @code{:d}, or @code{:e} followed
392by the value to be bound to the corresponding argument variable.
393(Symbols whose names begin with a colon are called @dfn{keywords},
394and they are self-quoting in the same way as @code{nil} and
395@code{t}.)
396
397For example, the call @code{(foo 1 2 :d 3 :c 4)} sets the five
398arguments to 1, 2, 4, 3, and 17, respectively. If the same keyword
399appears more than once in the function call, the first occurrence
400takes precedence over the later ones. Note that it is not possible
401to specify keyword arguments without specifying the optional
402argument @code{b} as well, since @code{(foo 1 :c 2)} would bind
403@code{b} to the keyword @code{:c}, then signal an error because
404@code{2} is not a valid keyword.
405
09094f28
CY
406You can also explicitly specify the keyword argument; it need not be
407simply the variable name prefixed with a colon. For example,
408
409@example
8d6510b9 410(cl-defun bar (&key (a 1) ((baz b) 4)))
09094f28
CY
411@end example
412
413@noindent
414
415specifies a keyword @code{:a} that sets the variable @code{a} with
416default value 1, as well as a keyword @code{baz} that sets the
417variable @code{b} with default value 4. In this case, because
418@code{baz} is not self-quoting, you must quote it explicitly in the
419function call, like this:
420
421@example
422(bar :a 10 'baz 42)
423@end example
424
425Ordinarily, it is an error to pass an unrecognized keyword to
4009494e
GM
426a function, e.g., @code{(foo 1 2 :c 3 :goober 4)}. You can ask
427Lisp to ignore unrecognized keywords, either by adding the
428marker @code{&allow-other-keys} after the keyword section
429of the argument list, or by specifying an @code{:allow-other-keys}
430argument in the call whose value is non-@code{nil}. If the
431function uses both @code{&rest} and @code{&key} at the same time,
432the ``rest'' argument is bound to the keyword list as it appears
433in the call. For example:
434
df43dd53 435@example
8d6510b9
GM
436(cl-defun find-thing (thing &rest rest &key need &allow-other-keys)
437 (or (apply 'cl-member thing thing-list :allow-other-keys t rest)
4009494e 438 (if need (error "Thing not found"))))
df43dd53 439@end example
4009494e
GM
440
441@noindent
442This function takes a @code{:need} keyword argument, but also
443accepts other keyword arguments which are passed on to the
8d6510b9
GM
444@code{cl-member} function. @code{allow-other-keys} is used to
445keep both @code{find-thing} and @code{cl-member} from complaining
4009494e
GM
446about each others' keywords in the arguments.
447
448The fifth section of the argument list consists of @dfn{auxiliary
449variables}. These are not really arguments at all, but simply
450variables which are bound to @code{nil} or to the specified
451@var{initforms} during execution of the function. There is no
452difference between the following two functions, except for a
453matter of stylistic taste:
454
455@example
8d6510b9 456(cl-defun foo (a b &aux (c (+ a b)) d)
4009494e
GM
457 @var{body})
458
8d6510b9 459(cl-defun foo (a b)
4009494e
GM
460 (let ((c (+ a b)) d)
461 @var{body}))
462@end example
463
464Argument lists support @dfn{destructuring}. In Common Lisp,
465destructuring is only allowed with @code{defmacro}; this package
8d6510b9 466allows it with @code{cl-defun} and other argument lists as well.
4009494e 467In destructuring, any argument variable (@var{var} in the above
9f2881af 468example) can be replaced by a list of variables, or more generally,
4009494e
GM
469a recursive argument list. The corresponding argument value must
470be a list whose elements match this recursive argument list.
471For example:
472
473@example
8d6510b9 474(cl-defmacro dolist ((var listform &optional resultform)
4009494e 475 &rest body)
df43dd53 476 @dots{})
4009494e
GM
477@end example
478
479This says that the first argument of @code{dolist} must be a list
480of two or three items; if there are other arguments as well as this
481list, they are stored in @code{body}. All features allowed in
482regular argument lists are allowed in these recursive argument lists.
483In addition, the clause @samp{&whole @var{var}} is allowed at the
484front of a recursive argument list. It binds @var{var} to the
485whole list being matched; thus @code{(&whole all a b)} matches
486a list of two things, with @code{a} bound to the first thing,
487@code{b} bound to the second thing, and @code{all} bound to the
488list itself. (Common Lisp allows @code{&whole} in top-level
489@code{defmacro} argument lists as well, but Emacs Lisp does not
490support this usage.)
491
492One last feature of destructuring is that the argument list may be
493dotted, so that the argument list @code{(a b . c)} is functionally
494equivalent to @code{(a b &rest c)}.
495
496If the optimization quality @code{safety} is set to 0
497(@pxref{Declarations}), error checking for wrong number of
498arguments and invalid keyword arguments is disabled. By default,
499argument lists are rigorously checked.
500
1d5b82ef 501@node Time of Evaluation
4009494e
GM
502@section Time of Evaluation
503
504@noindent
505Normally, the byte-compiler does not actually execute the forms in
506a file it compiles. For example, if a file contains @code{(setq foo t)},
507the act of compiling it will not actually set @code{foo} to @code{t}.
508This is true even if the @code{setq} was a top-level form (i.e., not
509enclosed in a @code{defun} or other form). Sometimes, though, you
510would like to have certain top-level forms evaluated at compile-time.
511For example, the compiler effectively evaluates @code{defmacro} forms
512at compile-time so that later parts of the file can refer to the
513macros that are defined.
514
df43dd53 515@defmac cl-eval-when (situations@dots{}) forms@dots{}
4009494e
GM
516This form controls when the body @var{forms} are evaluated.
517The @var{situations} list may contain any set of the symbols
518@code{compile}, @code{load}, and @code{eval} (or their long-winded
519ANSI equivalents, @code{:compile-toplevel}, @code{:load-toplevel},
520and @code{:execute}).
521
8d6510b9 522The @code{cl-eval-when} form is handled differently depending on
4009494e
GM
523whether or not it is being compiled as a top-level form.
524Specifically, it gets special treatment if it is being compiled
525by a command such as @code{byte-compile-file} which compiles files
526or buffers of code, and it appears either literally at the
527top level of the file or inside a top-level @code{progn}.
528
8d6510b9 529For compiled top-level @code{cl-eval-when}s, the body @var{forms} are
4009494e
GM
530executed at compile-time if @code{compile} is in the @var{situations}
531list, and the @var{forms} are written out to the file (to be executed
532at load-time) if @code{load} is in the @var{situations} list.
533
534For non-compiled-top-level forms, only the @code{eval} situation is
535relevant. (This includes forms executed by the interpreter, forms
536compiled with @code{byte-compile} rather than @code{byte-compile-file},
8d6510b9 537and non-top-level forms.) The @code{cl-eval-when} acts like a
4009494e
GM
538@code{progn} if @code{eval} is specified, and like @code{nil}
539(ignoring the body @var{forms}) if not.
540
8d6510b9 541The rules become more subtle when @code{cl-eval-when}s are nested;
4009494e
GM
542consult Steele (second edition) for the gruesome details (and
543some gruesome examples).
544
545Some simple examples:
546
547@example
548;; Top-level forms in foo.el:
8d6510b9
GM
549(cl-eval-when (compile) (setq foo1 'bar))
550(cl-eval-when (load) (setq foo2 'bar))
551(cl-eval-when (compile load) (setq foo3 'bar))
552(cl-eval-when (eval) (setq foo4 'bar))
553(cl-eval-when (eval compile) (setq foo5 'bar))
554(cl-eval-when (eval load) (setq foo6 'bar))
555(cl-eval-when (eval compile load) (setq foo7 'bar))
4009494e
GM
556@end example
557
558When @file{foo.el} is compiled, these variables will be set during
559the compilation itself:
560
561@example
562foo1 foo3 foo5 foo7 ; `compile'
563@end example
564
565When @file{foo.elc} is loaded, these variables will be set:
566
567@example
568foo2 foo3 foo6 foo7 ; `load'
569@end example
570
571And if @file{foo.el} is loaded uncompiled, these variables will
572be set:
573
574@example
575foo4 foo5 foo6 foo7 ; `eval'
576@end example
577
8d6510b9 578If these seven @code{cl-eval-when}s had been, say, inside a @code{defun},
4009494e
GM
579then the first three would have been equivalent to @code{nil} and the
580last four would have been equivalent to the corresponding @code{setq}s.
581
8d6510b9 582Note that @code{(cl-eval-when (load eval) @dots{})} is equivalent
4009494e
GM
583to @code{(progn @dots{})} in all contexts. The compiler treats
584certain top-level forms, like @code{defmacro} (sort-of) and
a05cb6e3 585@code{require}, as if they were wrapped in @code{(cl-eval-when
4009494e 586(compile load eval) @dots{})}.
e1117425 587@end defmac
4009494e 588
8d6510b9 589Emacs includes two special forms related to @code{cl-eval-when}.
9f2881af 590@xref{Eval During Compile,,,elisp,GNU Emacs Lisp Reference Manual}.
4009494e 591One of these, @code{eval-when-compile}, is not quite equivalent to
a05cb6e3 592any @code{cl-eval-when} construct and is described below.
4009494e
GM
593
594The other form, @code{(eval-and-compile @dots{})}, is exactly
9f2881af 595equivalent to @samp{(cl-eval-when (compile load eval) @dots{})}.
4009494e 596
df43dd53 597@defmac eval-when-compile forms@dots{}
4009494e
GM
598The @var{forms} are evaluated at compile-time; at execution time,
599this form acts like a quoted constant of the resulting value. Used
600at top-level, @code{eval-when-compile} is just like @samp{eval-when
601(compile eval)}. In other contexts, @code{eval-when-compile}
602allows code to be evaluated once at compile-time for efficiency
603or other reasons.
604
605This form is similar to the @samp{#.} syntax of true Common Lisp.
e1117425 606@end defmac
4009494e 607
e1117425 608@defmac cl-load-time-value form
4009494e
GM
609The @var{form} is evaluated at load-time; at execution time,
610this form acts like a quoted constant of the resulting value.
611
612Early Common Lisp had a @samp{#,} syntax that was similar to
613this, but ANSI Common Lisp replaced it with @code{load-time-value}
614and gave it more well-defined semantics.
615
8d6510b9 616In a compiled file, @code{cl-load-time-value} arranges for @var{form}
4009494e
GM
617to be evaluated when the @file{.elc} file is loaded and then used
618as if it were a quoted constant. In code compiled by
619@code{byte-compile} rather than @code{byte-compile-file}, the
620effect is identical to @code{eval-when-compile}. In uncompiled
8d6510b9 621code, both @code{eval-when-compile} and @code{cl-load-time-value}
4009494e
GM
622act exactly like @code{progn}.
623
624@example
625(defun report ()
626 (insert "This function was executed on: "
627 (current-time-string)
628 ", compiled on: "
629 (eval-when-compile (current-time-string))
630 ;; or '#.(current-time-string) in real Common Lisp
631 ", and loaded on: "
8d6510b9 632 (cl-load-time-value (current-time-string))))
4009494e
GM
633@end example
634
635@noindent
636Byte-compiled, the above defun will result in the following code
637(or its compiled equivalent, of course) in the @file{.elc} file:
638
639@example
640(setq --temp-- (current-time-string))
641(defun report ()
642 (insert "This function was executed on: "
643 (current-time-string)
644 ", compiled on: "
df43dd53 645 '"Wed Oct 31 16:32:28 2012"
4009494e
GM
646 ", and loaded on: "
647 --temp--))
648@end example
e1117425 649@end defmac
4009494e 650
1d5b82ef 651@node Predicates
4009494e
GM
652@chapter Predicates
653
654@noindent
655This section describes functions for testing whether various
656facts are true or false.
657
658@menu
8d6510b9
GM
659* Type Predicates:: @code{cl-typep}, @code{cl-deftype}, and @code{cl-coerce}.
660* Equality Predicates:: @code{cl-equalp}.
4009494e
GM
661@end menu
662
1d5b82ef 663@node Type Predicates
4009494e
GM
664@section Type Predicates
665
8d6510b9 666@defun cl-typep object type
4009494e
GM
667Check if @var{object} is of type @var{type}, where @var{type} is a
668(quoted) type name of the sort used by Common Lisp. For example,
8d6510b9 669@code{(cl-typep foo 'integer)} is equivalent to @code{(integerp foo)}.
4009494e
GM
670@end defun
671
672The @var{type} argument to the above function is either a symbol
673or a list beginning with a symbol.
674
675@itemize @bullet
676@item
677If the type name is a symbol, Emacs appends @samp{-p} to the
678symbol name to form the name of a predicate function for testing
679the type. (Built-in predicates whose names end in @samp{p} rather
680than @samp{-p} are used when appropriate.)
681
682@item
683The type symbol @code{t} stands for the union of all types.
8d6510b9 684@code{(cl-typep @var{object} t)} is always true. Likewise, the
4009494e 685type symbol @code{nil} stands for nothing at all, and
8d6510b9 686@code{(cl-typep @var{object} nil)} is always false.
4009494e
GM
687
688@item
689The type symbol @code{null} represents the symbol @code{nil}.
8d6510b9 690Thus @code{(cl-typep @var{object} 'null)} is equivalent to
4009494e
GM
691@code{(null @var{object})}.
692
693@item
694The type symbol @code{atom} represents all objects that are not cons
8d6510b9 695cells. Thus @code{(cl-typep @var{object} 'atom)} is equivalent to
4009494e
GM
696@code{(atom @var{object})}.
697
698@item
699The type symbol @code{real} is a synonym for @code{number}, and
700@code{fixnum} is a synonym for @code{integer}.
701
702@item
703The type symbols @code{character} and @code{string-char} match
704integers in the range from 0 to 255.
705
7fbf8f7b
GM
706@c No longer relevant, so covered by first item above (float -> floatp).
707@ignore
4009494e 708@item
8d6510b9 709The type symbol @code{float} uses the @code{cl-floatp-safe} predicate
4009494e
GM
710defined by this package rather than @code{floatp}, so it will work
711correctly even in Emacs versions without floating-point support.
7fbf8f7b 712@end ignore
4009494e
GM
713
714@item
715The type list @code{(integer @var{low} @var{high})} represents all
716integers between @var{low} and @var{high}, inclusive. Either bound
717may be a list of a single integer to specify an exclusive limit,
718or a @code{*} to specify no limit. The type @code{(integer * *)}
719is thus equivalent to @code{integer}.
720
721@item
722Likewise, lists beginning with @code{float}, @code{real}, or
723@code{number} represent numbers of that type falling in a particular
724range.
725
726@item
727Lists beginning with @code{and}, @code{or}, and @code{not} form
728combinations of types. For example, @code{(or integer (float 0 *))}
729represents all objects that are integers or non-negative floats.
730
731@item
8d6510b9 732Lists beginning with @code{member} or @code{cl-member} represent
4009494e
GM
733objects @code{eql} to any of the following values. For example,
734@code{(member 1 2 3 4)} is equivalent to @code{(integer 1 4)},
735and @code{(member nil)} is equivalent to @code{null}.
736
737@item
738Lists of the form @code{(satisfies @var{predicate})} represent
739all objects for which @var{predicate} returns true when called
740with that object as an argument.
741@end itemize
742
743The following function and macro (not technically predicates) are
8d6510b9 744related to @code{cl-typep}.
4009494e 745
8d6510b9 746@defun cl-coerce object type
4009494e
GM
747This function attempts to convert @var{object} to the specified
748@var{type}. If @var{object} is already of that type as determined by
a05cb6e3 749@code{cl-typep}, it is simply returned. Otherwise, certain types of
4009494e 750conversions will be made: If @var{type} is any sequence type
65e7ca35 751(@code{string}, @code{list}, etc.)@: then @var{object} will be
4009494e
GM
752converted to that type if possible. If @var{type} is
753@code{character}, then strings of length one and symbols with
754one-character names can be coerced. If @var{type} is @code{float},
755then integers can be coerced in versions of Emacs that support
8d6510b9 756floats. In all other circumstances, @code{cl-coerce} signals an
4009494e
GM
757error.
758@end defun
759
df43dd53 760@defmac cl-deftype name arglist forms@dots{}
4009494e
GM
761This macro defines a new type called @var{name}. It is similar
762to @code{defmacro} in many ways; when @var{name} is encountered
763as a type name, the body @var{forms} are evaluated and should
764return a type specifier that is equivalent to the type. The
765@var{arglist} is a Common Lisp argument list of the sort accepted
df43dd53 766by @code{cl-defmacro}. The type specifier @samp{(@var{name} @var{args}@dots{})}
4009494e
GM
767is expanded by calling the expander with those arguments; the type
768symbol @samp{@var{name}} is expanded by calling the expander with
769no arguments. The @var{arglist} is processed the same as for
8d6510b9 770@code{cl-defmacro} except that optional arguments without explicit
4009494e
GM
771defaults use @code{*} instead of @code{nil} as the ``default''
772default. Some examples:
773
774@example
8d6510b9
GM
775(cl-deftype null () '(satisfies null)) ; predefined
776(cl-deftype list () '(or null cons)) ; predefined
777(cl-deftype unsigned-byte (&optional bits)
4009494e
GM
778 (list 'integer 0 (if (eq bits '*) bits (1- (lsh 1 bits)))))
779(unsigned-byte 8) @equiv{} (integer 0 255)
780(unsigned-byte) @equiv{} (integer 0 *)
781unsigned-byte @equiv{} (integer 0 *)
782@end example
783
784@noindent
785The last example shows how the Common Lisp @code{unsigned-byte}
786type specifier could be implemented if desired; this package does
787not implement @code{unsigned-byte} by default.
e1117425 788@end defmac
4009494e 789
9f2881af
GM
790The @code{cl-typecase} (@pxref{Conditionals}) and @code{cl-check-type}
791(@pxref{Assertions}) macros also use type names. The @code{cl-map},
8d6510b9 792@code{cl-concatenate}, and @code{cl-merge} functions take type-name
4009494e
GM
793arguments to specify the type of sequence to return. @xref{Sequences}.
794
1d5b82ef 795@node Equality Predicates
4009494e
GM
796@section Equality Predicates
797
798@noindent
8d6510b9 799This package defines the Common Lisp predicate @code{cl-equalp}.
4009494e 800
8d6510b9 801@defun cl-equalp a b
4009494e
GM
802This function is a more flexible version of @code{equal}. In
803particular, it compares strings case-insensitively, and it compares
8d6510b9 804numbers without regard to type (so that @code{(cl-equalp 3 3.0)} is
4009494e
GM
805true). Vectors and conses are compared recursively. All other
806objects are compared as if by @code{equal}.
807
808This function differs from Common Lisp @code{equalp} in several
809respects. First, Common Lisp's @code{equalp} also compares
810@emph{characters} case-insensitively, which would be impractical
811in this package since Emacs does not distinguish between integers
812and characters. In keeping with the idea that strings are less
8d6510b9 813vector-like in Emacs Lisp, this package's @code{cl-equalp} also will
4009494e
GM
814not compare strings against vectors of integers.
815@end defun
816
817Also note that the Common Lisp functions @code{member} and @code{assoc}
818use @code{eql} to compare elements, whereas Emacs Lisp follows the
819MacLisp tradition and uses @code{equal} for these two functions.
72ff76bb
GM
820The functions @code{cl-member} and @code{cl-assoc} use @code{eql},
821as in Common Lisp. The standard Emacs Lisp functions @code{memq} and
1e934b84 822@code{assq} use @code{eq}, and the standard @code{memql} uses @code{eql}.
4009494e 823
1d5b82ef 824@node Control Structure
4009494e
GM
825@chapter Control Structure
826
827@noindent
828The features described in the following sections implement
5887564d
GM
829various advanced control structures, including extensions to the
830standard @code{setf} facility, and a number of looping and conditional
4009494e
GM
831constructs.
832
833@menu
8d6510b9 834* Assignment:: The @code{cl-psetq} form.
5887564d 835* Generalized Variables:: Extensions to generalized variables.
69c1c2e6 836* Variable Bindings:: @code{cl-progv}, @code{cl-flet}, @code{cl-macrolet}.
8d6510b9
GM
837* Conditionals:: @code{cl-case}, @code{cl-typecase}.
838* Blocks and Exits:: @code{cl-block}, @code{cl-return}, @code{cl-return-from}.
839* Iteration:: @code{cl-do}, @code{cl-dotimes}, @code{cl-dolist}, @code{cl-do-symbols}.
c65b407b 840* Loop Facility:: The Common Lisp @code{loop} macro.
f94b04fc 841* Multiple Values:: @code{cl-values}, @code{cl-multiple-value-bind}, etc.
4009494e
GM
842@end menu
843
1d5b82ef 844@node Assignment
4009494e
GM
845@section Assignment
846
847@noindent
8d6510b9 848The @code{cl-psetq} form is just like @code{setq}, except that multiple
4009494e
GM
849assignments are done in parallel rather than sequentially.
850
e1117425 851@defmac cl-psetq [symbol form]@dots{}
4009494e
GM
852This special form (actually a macro) is used to assign to several
853variables simultaneously. Given only one @var{symbol} and @var{form},
854it has the same effect as @code{setq}. Given several @var{symbol}
855and @var{form} pairs, it evaluates all the @var{form}s in advance
856and then stores the corresponding variables afterwards.
857
858@example
859(setq x 2 y 3)
860(setq x (+ x y) y (* x y))
861x
862 @result{} 5
863y ; @r{@code{y} was computed after @code{x} was set.}
864 @result{} 15
865(setq x 2 y 3)
8d6510b9 866(cl-psetq x (+ x y) y (* x y))
4009494e
GM
867x
868 @result{} 5
869y ; @r{@code{y} was computed before @code{x} was set.}
870 @result{} 6
871@end example
872
8d6510b9
GM
873The simplest use of @code{cl-psetq} is @code{(cl-psetq x y y x)}, which
874exchanges the values of two variables. (The @code{cl-rotatef} form
4009494e
GM
875provides an even more convenient way to swap two variables;
876@pxref{Modify Macros}.)
877
8d6510b9 878@code{cl-psetq} always returns @code{nil}.
e1117425 879@end defmac
4009494e 880
1d5b82ef 881@node Generalized Variables
4009494e
GM
882@section Generalized Variables
883
5887564d
GM
884A @dfn{generalized variable} or @dfn{place form} is one of the many
885places in Lisp memory where values can be stored. The simplest place
df43dd53 886form is a regular Lisp variable. But the @sc{car}s and @sc{cdr}s of lists,
5887564d
GM
887elements of arrays, properties of symbols, and many other locations
888are also places where Lisp values are stored. For basic information,
889@pxref{Generalized Variables,,,elisp,GNU Emacs Lisp Reference Manual}.
890This package provides several additional features related to
891generalized variables.
4009494e
GM
892
893@menu
5887564d 894* Setf Extensions:: Additional @code{setf} places.
4ddedf94 895* Modify Macros:: @code{cl-incf}, @code{cl-rotatef}, @code{cl-letf}, @code{cl-callf}, etc.
4009494e
GM
896@end menu
897
5887564d
GM
898@node Setf Extensions
899@subsection Setf Extensions
4009494e 900
1df7defd
PE
901Several standard (e.g., @code{car}) and Emacs-specific
902(e.g., @code{window-point}) Lisp functions are @code{setf}-able by default.
5887564d 903This package defines @code{setf} handlers for several additional functions:
4009494e 904
5887564d 905@itemize
4009494e 906@item
df43dd53
GM
907Functions from this package:
908@example
909cl-rest cl-subseq cl-get cl-getf
910cl-caaar@dots{}cl-cddddr cl-first@dots{}cl-tenth
911@end example
4009494e 912
516e1a08
GM
913@noindent
914Note that for @code{cl-getf} (as for @code{nthcdr}), the list argument
915of the function must itself be a valid @var{place} form.
916
4009494e 917@item
5887564d 918General Emacs Lisp functions:
df43dd53 919@example
5887564d
GM
920buffer-file-name getenv
921buffer-modified-p global-key-binding
922buffer-name local-key-binding
923buffer-string mark
924buffer-substring mark-marker
925current-buffer marker-position
926current-case-table mouse-position
927current-column point
928current-global-map point-marker
929current-input-mode point-max
930current-local-map point-min
931current-window-configuration read-mouse-position
932default-file-modes screen-height
933documentation-property screen-width
934face-background selected-window
935face-background-pixmap selected-screen
936face-font selected-frame
937face-foreground standard-case-table
938face-underline-p syntax-table
939file-modes visited-file-modtime
940frame-height window-height
941frame-parameters window-width
942frame-visible-p x-get-secondary-selection
943frame-width x-get-selection
944get-register
df43dd53 945@end example
4009494e
GM
946
947Most of these have directly corresponding ``set'' functions, like
948@code{use-local-map} for @code{current-local-map}, or @code{goto-char}
949for @code{point}. A few, like @code{point-min}, expand to longer
5887564d
GM
950sequences of code when they are used with @code{setf}
951(@code{(narrow-to-region x (point-max))} in this case).
4009494e
GM
952
953@item
954A call of the form @code{(substring @var{subplace} @var{n} [@var{m}])},
955where @var{subplace} is itself a valid generalized variable whose
956current value is a string, and where the value stored is also a
957string. The new string is spliced into the specified part of the
958destination string. For example:
959
960@example
961(setq a (list "hello" "world"))
962 @result{} ("hello" "world")
963(cadr a)
964 @result{} "world"
965(substring (cadr a) 2 4)
966 @result{} "rl"
967(setf (substring (cadr a) 2 4) "o")
968 @result{} "o"
969(cadr a)
970 @result{} "wood"
971a
972 @result{} ("hello" "wood")
973@end example
974
975The generalized variable @code{buffer-substring}, listed above,
976also works in this way by replacing a portion of the current buffer.
977
a358a44e 978@c FIXME? Also `eq'? (see cl-lib.el)
5887564d 979
a3c5b619
GM
980@c Currently commented out in cl.el.
981@ignore
4009494e
GM
982@item
983A call of the form @code{(apply '@var{func} @dots{})} or
984@code{(apply (function @var{func}) @dots{})}, where @var{func}
985is a @code{setf}-able function whose store function is ``suitable''
986in the sense described in Steele's book; since none of the standard
987Emacs place functions are suitable in this sense, this feature is
988only interesting when used with places you define yourself with
989@code{define-setf-method} or the long form of @code{defsetf}.
d55911cf 990@xref{Obsolete Setf Customization}.
a3c5b619 991@end ignore
4009494e 992
a358a44e 993@c FIXME? Is this still true?
4009494e
GM
994@item
995A macro call, in which case the macro is expanded and @code{setf}
996is applied to the resulting form.
4009494e
GM
997@end itemize
998
5887564d
GM
999@c FIXME should this be in lispref? It seems self-evident.
1000@c Contrast with the cl-incf example later on.
5c6ce1c7 1001@c Here it really only serves as a contrast to wrong-order.
4009494e
GM
1002The @code{setf} macro takes care to evaluate all subforms in
1003the proper left-to-right order; for example,
1004
1005@example
39a58b5b 1006(setf (aref vec (cl-incf i)) i)
4009494e
GM
1007@end example
1008
1009@noindent
39a58b5b 1010looks like it will evaluate @code{(cl-incf i)} exactly once, before the
4009494e
GM
1011following access to @code{i}; the @code{setf} expander will insert
1012temporary variables as necessary to ensure that it does in fact work
1013this way no matter what setf-method is defined for @code{aref}.
1014(In this case, @code{aset} would be used and no such steps would
1015be necessary since @code{aset} takes its arguments in a convenient
1016order.)
1017
1018However, if the @var{place} form is a macro which explicitly
1019evaluates its arguments in an unusual order, this unusual order
1020will be preserved. Adapting an example from Steele, given
1021
1022@example
1023(defmacro wrong-order (x y) (list 'aref y x))
1024@end example
1025
1026@noindent
1027the form @code{(setf (wrong-order @var{a} @var{b}) 17)} will
1028evaluate @var{b} first, then @var{a}, just as in an actual call
1029to @code{wrong-order}.
4009494e 1030
1d5b82ef 1031@node Modify Macros
4009494e
GM
1032@subsection Modify Macros
1033
1034@noindent
5887564d
GM
1035This package defines a number of macros that operate on generalized
1036variables. Many are interesting and useful even when the @var{place}
1037is just a variable name.
4009494e 1038
e1117425 1039@defmac cl-psetf [place form]@dots{}
8d6510b9 1040This macro is to @code{setf} what @code{cl-psetq} is to @code{setq}:
4009494e
GM
1041When several @var{place}s and @var{form}s are involved, the
1042assignments take place in parallel rather than sequentially.
1043Specifically, all subforms are evaluated from left to right, then
1044all the assignments are done (in an undefined order).
e1117425 1045@end defmac
4009494e 1046
e1117425 1047@defmac cl-incf place &optional x
4009494e
GM
1048This macro increments the number stored in @var{place} by one, or
1049by @var{x} if specified. The incremented value is returned. For
39a58b5b
GM
1050example, @code{(cl-incf i)} is equivalent to @code{(setq i (1+ i))}, and
1051@code{(cl-incf (car x) 2)} is equivalent to @code{(setcar x (+ (car x) 2))}.
4009494e 1052
5887564d
GM
1053As with @code{setf}, care is taken to preserve the ``apparent'' order
1054of evaluation. For example,
4009494e
GM
1055
1056@example
39a58b5b 1057(cl-incf (aref vec (cl-incf i)))
4009494e
GM
1058@end example
1059
1060@noindent
1061appears to increment @code{i} once, then increment the element of
1062@code{vec} addressed by @code{i}; this is indeed exactly what it
1063does, which means the above form is @emph{not} equivalent to the
1064``obvious'' expansion,
1065
1066@example
a05cb6e3
GM
1067(setf (aref vec (cl-incf i))
1068 (1+ (aref vec (cl-incf i)))) ; wrong!
4009494e
GM
1069@end example
1070
1071@noindent
1072but rather to something more like
1073
1074@example
39a58b5b 1075(let ((temp (cl-incf i)))
4009494e
GM
1076 (setf (aref vec temp) (1+ (aref vec temp))))
1077@end example
1078
1079@noindent
39a58b5b 1080Again, all of this is taken care of automatically by @code{cl-incf} and
4009494e
GM
1081the other generalized-variable macros.
1082
39a58b5b
GM
1083As a more Emacs-specific example of @code{cl-incf}, the expression
1084@code{(cl-incf (point) @var{n})} is essentially equivalent to
4009494e 1085@code{(forward-char @var{n})}.
e1117425 1086@end defmac
4009494e 1087
e1117425 1088@defmac cl-decf place &optional x
4009494e
GM
1089This macro decrements the number stored in @var{place} by one, or
1090by @var{x} if specified.
e1117425 1091@end defmac
4009494e 1092
e1117425 1093@defmac cl-pushnew x place @t{&key :test :test-not :key}
4009494e
GM
1094This macro inserts @var{x} at the front of the list stored in
1095@var{place}, but only if @var{x} was not @code{eql} to any
1096existing element of the list. The optional keyword arguments
a05cb6e3 1097are interpreted in the same way as for @code{cl-adjoin}.
4009494e 1098@xref{Lists as Sets}.
e1117425 1099@end defmac
4009494e 1100
e1117425 1101@defmac cl-shiftf place@dots{} newvalue
4009494e
GM
1102This macro shifts the @var{place}s left by one, shifting in the
1103value of @var{newvalue} (which may be any Lisp expression, not just
1104a generalized variable), and returning the value shifted out of
5887564d 1105the first @var{place}. Thus, @code{(cl-shiftf @var{a} @var{b} @var{c}
4009494e
GM
1106@var{d})} is equivalent to
1107
1108@example
1109(prog1
1110 @var{a}
5887564d
GM
1111 (cl-psetf @var{a} @var{b}
1112 @var{b} @var{c}
1113 @var{c} @var{d}))
4009494e
GM
1114@end example
1115
1116@noindent
1117except that the subforms of @var{a}, @var{b}, and @var{c} are actually
1118evaluated only once each and in the apparent order.
e1117425 1119@end defmac
4009494e 1120
e1117425 1121@defmac cl-rotatef place@dots{}
4009494e 1122This macro rotates the @var{place}s left by one in circular fashion.
a05cb6e3 1123Thus, @code{(cl-rotatef @var{a} @var{b} @var{c} @var{d})} is equivalent to
4009494e
GM
1124
1125@example
5887564d
GM
1126(cl-psetf @var{a} @var{b}
1127 @var{b} @var{c}
1128 @var{c} @var{d}
1129 @var{d} @var{a})
4009494e
GM
1130@end example
1131
1132@noindent
a05cb6e3
GM
1133except for the evaluation of subforms. @code{cl-rotatef} always
1134returns @code{nil}. Note that @code{(cl-rotatef @var{a} @var{b})}
4009494e 1135conveniently exchanges @var{a} and @var{b}.
e1117425 1136@end defmac
4009494e
GM
1137
1138The following macros were invented for this package; they have no
1139analogues in Common Lisp.
1140
4ddedf94 1141@defmac cl-letf (bindings@dots{}) forms@dots{}
4009494e
GM
1142This macro is analogous to @code{let}, but for generalized variables
1143rather than just symbols. Each @var{binding} should be of the form
1144@code{(@var{place} @var{value})}; the original contents of the
1145@var{place}s are saved, the @var{value}s are stored in them, and
1146then the body @var{form}s are executed. Afterwards, the @var{places}
1147are set back to their original saved contents. This cleanup happens
1148even if the @var{form}s exit irregularly due to a @code{throw} or an
1149error.
1150
1151For example,
1152
1153@example
4ddedf94
GM
1154(cl-letf (((point) (point-min))
1155 (a 17))
df43dd53 1156 @dots{})
4009494e
GM
1157@end example
1158
1159@noindent
4ddedf94 1160moves point in the current buffer to the beginning of the buffer,
4009494e
GM
1161and also binds @code{a} to 17 (as if by a normal @code{let}, since
1162@code{a} is just a regular variable). After the body exits, @code{a}
1163is set back to its original value and point is moved back to its
1164original position.
1165
4ddedf94 1166Note that @code{cl-letf} on @code{(point)} is not quite like a
4009494e
GM
1167@code{save-excursion}, as the latter effectively saves a marker
1168which tracks insertions and deletions in the buffer. Actually,
4ddedf94 1169a @code{cl-letf} of @code{(point-marker)} is much closer to this
4009494e
GM
1170behavior. (@code{point} and @code{point-marker} are equivalent
1171as @code{setf} places; each will accept either an integer or a
1172marker as the stored value.)
1173
1174Since generalized variables look like lists, @code{let}'s shorthand
1175of using @samp{foo} for @samp{(foo nil)} as a @var{binding} would
4ddedf94 1176be ambiguous in @code{cl-letf} and is not allowed.
4009494e
GM
1177
1178However, a @var{binding} specifier may be a one-element list
1179@samp{(@var{place})}, which is similar to @samp{(@var{place}
1180@var{place})}. In other words, the @var{place} is not disturbed
4ddedf94
GM
1181on entry to the body, and the only effect of the @code{cl-letf} is
1182to restore the original value of @var{place} afterwards.
1183@c I suspect this may no longer be true; either way it's
1184@c implementation detail and so not essential to document.
1185@ignore
1186(The redundant access-and-store suggested by the @code{(@var{place}
4009494e 1187@var{place})} example does not actually occur.)
4ddedf94 1188@end ignore
4009494e 1189
4ddedf94
GM
1190Note that in this case, and in fact almost every case, @var{place}
1191must have a well-defined value outside the @code{cl-letf} body.
1192There is essentially only one exception to this, which is @var{place}
1193a plain variable with a specified @var{value} (such as @code{(a 17)}
1194in the above example).
1195@c See http://debbugs.gnu.org/12758
1196@c Some or all of this was true for cl.el, but not for cl-lib.el.
1197@ignore
1198The only exceptions are plain variables and calls to
1199@code{symbol-value} and @code{symbol-function}. If the symbol is not
1200bound on entry, it is simply made unbound by @code{makunbound} or
1201@code{fmakunbound} on exit.
1202@end ignore
87b0d8b1
GM
1203
1204Note that the @file{cl.el} version of this macro behaves slightly
1205differently. @xref{Obsolete Macros}.
e1117425 1206@end defmac
4009494e 1207
e1117425 1208@defmac cl-letf* (bindings@dots{}) forms@dots{}
4ddedf94 1209This macro is to @code{cl-letf} what @code{let*} is to @code{let}:
4009494e 1210It does the bindings in sequential rather than parallel order.
e1117425 1211@end defmac
4009494e 1212
e1117425 1213@defmac cl-callf @var{function} @var{place} @var{args}@dots{}
4009494e
GM
1214This is the ``generic'' modify macro. It calls @var{function},
1215which should be an unquoted function name, macro name, or lambda.
1216It passes @var{place} and @var{args} as arguments, and assigns the
39a58b5b 1217result back to @var{place}. For example, @code{(cl-incf @var{place}
a05cb6e3 1218@var{n})} is the same as @code{(cl-callf + @var{place} @var{n})}.
4009494e
GM
1219Some more examples:
1220
1221@example
a05cb6e3
GM
1222(cl-callf abs my-number)
1223(cl-callf concat (buffer-name) "<" (number-to-string n) ">")
1224(cl-callf cl-union happy-people (list joe bob) :test 'same-person)
4009494e
GM
1225@end example
1226
d571e9c3 1227Note again that @code{cl-callf} is an extension to standard Common Lisp.
e1117425 1228@end defmac
4009494e 1229
e1117425 1230@defmac cl-callf2 @var{function} @var{arg1} @var{place} @var{args}@dots{}
a05cb6e3 1231This macro is like @code{cl-callf}, except that @var{place} is
4009494e
GM
1232the @emph{second} argument of @var{function} rather than the
1233first. For example, @code{(push @var{x} @var{place})} is
a05cb6e3 1234equivalent to @code{(cl-callf2 cons @var{x} @var{place})}.
e1117425 1235@end defmac
4009494e 1236
a05cb6e3 1237The @code{cl-callf} and @code{cl-callf2} macros serve as building
d55911cf 1238blocks for other macros like @code{cl-incf}, and @code{cl-pushnew}.
4ddedf94 1239The @code{cl-letf} and @code{cl-letf*} macros are used in the processing
d55911cf 1240of symbol macros; @pxref{Macro Bindings}.
4009494e 1241
4009494e 1242
1d5b82ef 1243@node Variable Bindings
4009494e
GM
1244@section Variable Bindings
1245
1246@noindent
1247These Lisp forms make bindings to variables and function names,
1248analogous to Lisp's built-in @code{let} form.
1249
4ddedf94 1250@xref{Modify Macros}, for the @code{cl-letf} and @code{cl-letf*} forms which
4009494e
GM
1251are also related to variable bindings.
1252
1253@menu
39a58b5b 1254* Dynamic Bindings:: The @code{cl-progv} form.
69c1c2e6 1255* Function Bindings:: @code{cl-flet} and @code{cl-labels}.
39a58b5b 1256* Macro Bindings:: @code{cl-macrolet} and @code{cl-symbol-macrolet}.
4009494e
GM
1257@end menu
1258
1d5b82ef 1259@node Dynamic Bindings
4009494e
GM
1260@subsection Dynamic Bindings
1261
1262@noindent
1263The standard @code{let} form binds variables whose names are known
39a58b5b 1264at compile-time. The @code{cl-progv} form provides an easy way to
4009494e
GM
1265bind variables whose names are computed at run-time.
1266
e1117425 1267@defmac cl-progv symbols values forms@dots{}
4009494e
GM
1268This form establishes @code{let}-style variable bindings on a
1269set of variables computed at run-time. The expressions
1270@var{symbols} and @var{values} are evaluated, and must return lists
1271of symbols and values, respectively. The symbols are bound to the
1272corresponding values for the duration of the body @var{form}s.
1273If @var{values} is shorter than @var{symbols}, the last few symbols
a05cb6e3 1274are bound to @code{nil}.
4009494e
GM
1275If @var{symbols} is shorter than @var{values}, the excess values
1276are ignored.
e1117425 1277@end defmac
4009494e 1278
1d5b82ef 1279@node Function Bindings
4009494e
GM
1280@subsection Function Bindings
1281
1282@noindent
1283These forms make @code{let}-like bindings to functions instead
1284of variables.
1285
69c1c2e6 1286@defmac cl-flet (bindings@dots{}) forms@dots{}
4009494e
GM
1287This form establishes @code{let}-style bindings on the function
1288cells of symbols rather than on the value cells. Each @var{binding}
1289must be a list of the form @samp{(@var{name} @var{arglist}
1290@var{forms}@dots{})}, which defines a function exactly as if
a05cb6e3 1291it were a @code{cl-defun} form. The function @var{name} is defined
69c1c2e6 1292accordingly for the duration of the body of the @code{cl-flet}; then
4009494e
GM
1293the old function definition, or lack thereof, is restored.
1294
e8693c96
GM
1295You can use @code{cl-flet} to disable or modify the behavior of
1296functions (including Emacs primitives) in a temporary, localized fashion.
1297(Compare this with the idea of advising functions.
87b0d8b1 1298@xref{Advising Functions,,,elisp,GNU Emacs Lisp Reference Manual}.)
4009494e 1299
e8693c96
GM
1300The bindings are lexical in scope. This means that all references to
1301the named functions must appear physically within the body of the
1302@code{cl-flet} form.
4009494e 1303
69c1c2e6 1304Functions defined by @code{cl-flet} may use the full Common Lisp
39a58b5b
GM
1305argument notation supported by @code{cl-defun}; also, the function
1306body is enclosed in an implicit block as if by @code{cl-defun}.
4009494e 1307@xref{Program Structure}.
87b0d8b1
GM
1308
1309Note that the @file{cl.el} version of this macro behaves slightly
e8693c96
GM
1310differently. In particular, its binding is dynamic rather than
1311lexical. @xref{Obsolete Macros}.
e1117425 1312@end defmac
4009494e 1313
69c1c2e6
GM
1314@defmac cl-labels (bindings@dots{}) forms@dots{}
1315The @code{cl-labels} form is like @code{cl-flet}, except that
1316the function bindings can be recursive. The scoping is lexical,
1317but you can only capture functions in closures if
9f2881af 1318@code{lexical-binding} is @code{t}.
69c1c2e6
GM
1319@xref{Closures,,,elisp,GNU Emacs Lisp Reference Manual}, and
1320@ref{Using Lexical Binding,,,elisp,GNU Emacs Lisp Reference Manual}.
4009494e
GM
1321
1322Lexical scoping means that all references to the named
1323functions must appear physically within the body of the
69c1c2e6
GM
1324@code{cl-labels} form. References may appear both in the body
1325@var{forms} of @code{cl-labels} itself, and in the bodies of
1326the functions themselves. Thus, @code{cl-labels} can define
1327local recursive functions, or mutually-recursive sets of functions.
4009494e
GM
1328
1329A ``reference'' to a function name is either a call to that
1330function, or a use of its name quoted by @code{quote} or
1331@code{function} to be passed on to, say, @code{mapcar}.
87b0d8b1
GM
1332
1333Note that the @file{cl.el} version of this macro behaves slightly
1334differently. @xref{Obsolete Macros}.
e1117425 1335@end defmac
4009494e 1336
1d5b82ef 1337@node Macro Bindings
4009494e
GM
1338@subsection Macro Bindings
1339
1340@noindent
a05cb6e3 1341These forms create local macros and ``symbol macros''.
4009494e 1342
e1117425 1343@defmac cl-macrolet (bindings@dots{}) forms@dots{}
69c1c2e6 1344This form is analogous to @code{cl-flet}, but for macros instead of
4009494e 1345functions. Each @var{binding} is a list of the same form as the
39a58b5b 1346arguments to @code{cl-defmacro} (i.e., a macro name, argument list,
4009494e 1347and macro-expander forms). The macro is defined accordingly for
39a58b5b 1348use within the body of the @code{cl-macrolet}.
4009494e 1349
9f2881af
GM
1350Because of the nature of macros, @code{cl-macrolet} is always lexically
1351scoped. The @code{cl-macrolet} binding will
4009494e
GM
1352affect only calls that appear physically within the body
1353@var{forms}, possibly after expansion of other macros in the
1354body.
e1117425 1355@end defmac
4009494e 1356
e1117425 1357@defmac cl-symbol-macrolet (bindings@dots{}) forms@dots{}
4009494e
GM
1358This form creates @dfn{symbol macros}, which are macros that look
1359like variable references rather than function calls. Each
1360@var{binding} is a list @samp{(@var{var} @var{expansion})};
1361any reference to @var{var} within the body @var{forms} is
1362replaced by @var{expansion}.
1363
1364@example
1365(setq bar '(5 . 9))
39a58b5b
GM
1366(cl-symbol-macrolet ((foo (car bar)))
1367 (cl-incf foo))
4009494e
GM
1368bar
1369 @result{} (6 . 9)
1370@end example
1371
1372A @code{setq} of a symbol macro is treated the same as a @code{setf}.
1373I.e., @code{(setq foo 4)} in the above would be equivalent to
1374@code{(setf foo 4)}, which in turn expands to @code{(setf (car bar) 4)}.
1375
1376Likewise, a @code{let} or @code{let*} binding a symbol macro is
4ddedf94 1377treated like a @code{cl-letf} or @code{cl-letf*}. This differs from true
4009494e 1378Common Lisp, where the rules of lexical scoping cause a @code{let}
9f2881af
GM
1379binding to shadow a @code{symbol-macrolet} binding. In this package,
1380such shadowing does not occur, even when @code{lexical-binding} is
1381@c See http://debbugs.gnu.org/12119
1382@code{t}. (This behavior predates the addition of lexical binding to
1383Emacs Lisp, and may change in future to respect @code{lexical-binding}.)
1384At present in this package, only @code{lexical-let} and
1385@code{lexical-let*} will shadow a symbol macro. @xref{Obsolete
1386Lexical Binding}.
4009494e
GM
1387
1388There is no analogue of @code{defmacro} for symbol macros; all symbol
39a58b5b 1389macros are local. A typical use of @code{cl-symbol-macrolet} is in the
4009494e
GM
1390expansion of another macro:
1391
1392@example
39a58b5b 1393(cl-defmacro my-dolist ((x list) &rest body)
9f2881af 1394 (let ((var (cl-gensym)))
39a58b5b 1395 (list 'cl-loop 'for var 'on list 'do
a05cb6e3
GM
1396 (cl-list* 'cl-symbol-macrolet
1397 (list (list x (list 'car var)))
1398 body))))
4009494e
GM
1399
1400(setq mylist '(1 2 3 4))
39a58b5b 1401(my-dolist (x mylist) (cl-incf x))
4009494e
GM
1402mylist
1403 @result{} (2 3 4 5)
1404@end example
1405
1406@noindent
1407In this example, the @code{my-dolist} macro is similar to @code{dolist}
1408(@pxref{Iteration}) except that the variable @code{x} becomes a true
1409reference onto the elements of the list. The @code{my-dolist} call
1410shown here expands to
1411
1412@example
39a58b5b
GM
1413(cl-loop for G1234 on mylist do
1414 (cl-symbol-macrolet ((x (car G1234)))
1415 (cl-incf x)))
4009494e
GM
1416@end example
1417
1418@noindent
1419which in turn expands to
1420
1421@example
39a58b5b 1422(cl-loop for G1234 on mylist do (cl-incf (car G1234)))
4009494e
GM
1423@end example
1424
39a58b5b 1425@xref{Loop Facility}, for a description of the @code{cl-loop} macro.
4009494e
GM
1426This package defines a nonstandard @code{in-ref} loop clause that
1427works much like @code{my-dolist}.
e1117425 1428@end defmac
4009494e 1429
1d5b82ef 1430@node Conditionals
4009494e
GM
1431@section Conditionals
1432
1433@noindent
1434These conditional forms augment Emacs Lisp's simple @code{if},
1435@code{and}, @code{or}, and @code{cond} forms.
1436
e1117425 1437@defmac cl-case keyform clause@dots{}
4009494e
GM
1438This macro evaluates @var{keyform}, then compares it with the key
1439values listed in the various @var{clause}s. Whichever clause matches
1440the key is executed; comparison is done by @code{eql}. If no clause
39a58b5b 1441matches, the @code{cl-case} form returns @code{nil}. The clauses are
4009494e
GM
1442of the form
1443
1444@example
1445(@var{keylist} @var{body-forms}@dots{})
1446@end example
1447
1448@noindent
1449where @var{keylist} is a list of key values. If there is exactly
1450one value, and it is not a cons cell or the symbol @code{nil} or
1451@code{t}, then it can be used by itself as a @var{keylist} without
a05cb6e3 1452being enclosed in a list. All key values in the @code{cl-case} form
4009494e
GM
1453must be distinct. The final clauses may use @code{t} in place of
1454a @var{keylist} to indicate a default clause that should be taken
1455if none of the other clauses match. (The symbol @code{otherwise}
1456is also recognized in place of @code{t}. To make a clause that
1457matches the actual symbol @code{t}, @code{nil}, or @code{otherwise},
1458enclose the symbol in a list.)
1459
1460For example, this expression reads a keystroke, then does one of
1461four things depending on whether it is an @samp{a}, a @samp{b},
1462a @key{RET} or @kbd{C-j}, or anything else.
1463
1464@example
39a58b5b 1465(cl-case (read-char)
4009494e
GM
1466 (?a (do-a-thing))
1467 (?b (do-b-thing))
1468 ((?\r ?\n) (do-ret-thing))
1469 (t (do-other-thing)))
1470@end example
e1117425 1471@end defmac
4009494e 1472
e1117425 1473@defmac cl-ecase keyform clause@dots{}
39a58b5b 1474This macro is just like @code{cl-case}, except that if the key does
4009494e
GM
1475not match any of the clauses, an error is signaled rather than
1476simply returning @code{nil}.
e1117425 1477@end defmac
4009494e 1478
e1117425 1479@defmac cl-typecase keyform clause@dots{}
39a58b5b 1480This macro is a version of @code{cl-case} that checks for types
4009494e 1481rather than values. Each @var{clause} is of the form
df43dd53 1482@samp{(@var{type} @var{body}@dots{})}. @xref{Type Predicates},
4009494e
GM
1483for a description of type specifiers. For example,
1484
1485@example
39a58b5b 1486(cl-typecase x
4009494e
GM
1487 (integer (munch-integer x))
1488 (float (munch-float x))
1489 (string (munch-integer (string-to-int x)))
1490 (t (munch-anything x)))
1491@end example
1492
1493The type specifier @code{t} matches any type of object; the word
1494@code{otherwise} is also allowed. To make one clause match any of
df43dd53 1495several types, use an @code{(or @dots{})} type specifier.
e1117425 1496@end defmac
4009494e 1497
e1117425 1498@defmac cl-etypecase keyform clause@dots{}
39a58b5b 1499This macro is just like @code{cl-typecase}, except that if the key does
4009494e
GM
1500not match any of the clauses, an error is signaled rather than
1501simply returning @code{nil}.
e1117425 1502@end defmac
4009494e 1503
1d5b82ef 1504@node Blocks and Exits
4009494e
GM
1505@section Blocks and Exits
1506
1507@noindent
1508Common Lisp @dfn{blocks} provide a non-local exit mechanism very
9f2881af
GM
1509similar to @code{catch} and @code{throw}, with lexical scoping.
1510This package actually implements @code{cl-block}
4009494e 1511in terms of @code{catch}; however, the lexical scoping allows the
c65b407b 1512byte-compiler to omit the costly @code{catch} step if the
39a58b5b 1513body of the block does not actually @code{cl-return-from} the block.
4009494e 1514
e1117425 1515@defmac cl-block name forms@dots{}
4009494e 1516The @var{forms} are evaluated as if by a @code{progn}. However,
39a58b5b
GM
1517if any of the @var{forms} execute @code{(cl-return-from @var{name})},
1518they will jump out and return directly from the @code{cl-block} form.
1519The @code{cl-block} returns the result of the last @var{form} unless
1520a @code{cl-return-from} occurs.
4009494e 1521
39a58b5b 1522The @code{cl-block}/@code{cl-return-from} mechanism is quite similar to
4009494e
GM
1523the @code{catch}/@code{throw} mechanism. The main differences are
1524that block @var{name}s are unevaluated symbols, rather than forms
9f2881af
GM
1525(such as quoted symbols) that evaluate to a tag at run-time; and
1526also that blocks are always lexically scoped.
1527In a dynamically scoped @code{catch}, functions called from the
1528@code{catch} body can also @code{throw} to the @code{catch}. This
1529is not an option for @code{cl-block}, where
1530the @code{cl-return-from} referring to a block name must appear
4009494e
GM
1531physically within the @var{forms} that make up the body of the block.
1532They may not appear within other called functions, although they may
1533appear within macro expansions or @code{lambda}s in the body. Block
1534names and @code{catch} names form independent name-spaces.
1535
1536In true Common Lisp, @code{defun} and @code{defmacro} surround
1537the function or expander bodies with implicit blocks with the
1538same name as the function or macro. This does not occur in Emacs
39a58b5b 1539Lisp, but this package provides @code{cl-defun} and @code{cl-defmacro}
9f2881af 1540forms, which do create the implicit block.
4009494e
GM
1541
1542The Common Lisp looping constructs defined by this package,
39a58b5b 1543such as @code{cl-loop} and @code{cl-dolist}, also create implicit blocks
4009494e
GM
1544just as in Common Lisp.
1545
9f2881af 1546Because they are implemented in terms of Emacs Lisp's @code{catch}
4009494e
GM
1547and @code{throw}, blocks have the same overhead as actual
1548@code{catch} constructs (roughly two function calls). However,
c65b407b 1549the byte compiler will optimize away the @code{catch}
4009494e 1550if the block does
39a58b5b
GM
1551not in fact contain any @code{cl-return} or @code{cl-return-from} calls
1552that jump to it. This means that @code{cl-do} loops and @code{cl-defun}
9f2881af 1553functions that don't use @code{cl-return} don't pay the overhead to
4009494e 1554support it.
e1117425 1555@end defmac
4009494e 1556
e1117425 1557@defmac cl-return-from name [result]
4009494e
GM
1558This macro returns from the block named @var{name}, which must be
1559an (unevaluated) symbol. If a @var{result} form is specified, it
1560is evaluated to produce the result returned from the @code{block}.
1561Otherwise, @code{nil} is returned.
e1117425 1562@end defmac
4009494e 1563
e1117425 1564@defmac cl-return [result]
39a58b5b
GM
1565This macro is exactly like @code{(cl-return-from nil @var{result})}.
1566Common Lisp loops like @code{cl-do} and @code{cl-dolist} implicitly enclose
4009494e 1567themselves in @code{nil} blocks.
e1117425 1568@end defmac
4009494e 1569
1d5b82ef 1570@node Iteration
4009494e
GM
1571@section Iteration
1572
1573@noindent
1574The macros described here provide more sophisticated, high-level
9f2881af
GM
1575looping constructs to complement Emacs Lisp's basic loop forms
1576(@pxref{Iteration,,,elisp,GNU Emacs Lisp Reference Manual}).
4009494e 1577
e1117425 1578@defmac cl-loop forms@dots{}
df43dd53 1579This package supports both the simple, old-style meaning of
4009494e
GM
1580@code{loop} and the extremely powerful and flexible feature known as
1581the @dfn{Loop Facility} or @dfn{Loop Macro}. This more advanced
1582facility is discussed in the following section; @pxref{Loop Facility}.
1583The simple form of @code{loop} is described here.
1584
39a58b5b
GM
1585If @code{cl-loop} is followed by zero or more Lisp expressions,
1586then @code{(cl-loop @var{exprs}@dots{})} simply creates an infinite
4009494e
GM
1587loop executing the expressions over and over. The loop is
1588enclosed in an implicit @code{nil} block. Thus,
1589
1590@example
39a58b5b 1591(cl-loop (foo) (if (no-more) (return 72)) (bar))
4009494e
GM
1592@end example
1593
1594@noindent
1595is exactly equivalent to
1596
1597@example
39a58b5b 1598(cl-block nil (while t (foo) (if (no-more) (return 72)) (bar)))
4009494e
GM
1599@end example
1600
1601If any of the expressions are plain symbols, the loop is instead
1602interpreted as a Loop Macro specification as described later.
1603(This is not a restriction in practice, since a plain symbol
1604in the above notation would simply access and throw away the
1605value of a variable.)
e1117425 1606@end defmac
4009494e 1607
e1117425 1608@defmac cl-do (spec@dots{}) (end-test [result@dots{}]) forms@dots{}
4009494e
GM
1609This macro creates a general iterative loop. Each @var{spec} is
1610of the form
1611
1612@example
1613(@var{var} [@var{init} [@var{step}]])
1614@end example
1615
1616The loop works as follows: First, each @var{var} is bound to the
1617associated @var{init} value as if by a @code{let} form. Then, in
1618each iteration of the loop, the @var{end-test} is evaluated; if
1619true, the loop is finished. Otherwise, the body @var{forms} are
1620evaluated, then each @var{var} is set to the associated @var{step}
8d6510b9 1621expression (as if by a @code{cl-psetq} form) and the next iteration
4009494e
GM
1622begins. Once the @var{end-test} becomes true, the @var{result}
1623forms are evaluated (with the @var{var}s still bound to their
a05cb6e3 1624values) to produce the result returned by @code{cl-do}.
4009494e 1625
39a58b5b
GM
1626The entire @code{cl-do} loop is enclosed in an implicit @code{nil}
1627block, so that you can use @code{(cl-return)} to break out of the
4009494e
GM
1628loop at any time.
1629
1630If there are no @var{result} forms, the loop returns @code{nil}.
1631If a given @var{var} has no @var{step} form, it is bound to its
a05cb6e3 1632@var{init} value but not otherwise modified during the @code{cl-do}
4009494e
GM
1633loop (unless the code explicitly modifies it); this case is just
1634a shorthand for putting a @code{(let ((@var{var} @var{init})) @dots{})}
1635around the loop. If @var{init} is also omitted it defaults to
1636@code{nil}, and in this case a plain @samp{@var{var}} can be used
1637in place of @samp{(@var{var})}, again following the analogy with
1638@code{let}.
1639
9f2881af 1640This example (from Steele) illustrates a loop that applies the
4009494e
GM
1641function @code{f} to successive pairs of values from the lists
1642@code{foo} and @code{bar}; it is equivalent to the call
39a58b5b 1643@code{(cl-mapcar 'f foo bar)}. Note that this loop has no body
4009494e
GM
1644@var{forms} at all, performing all its work as side effects of
1645the rest of the loop.
1646
1647@example
39a58b5b
GM
1648(cl-do ((x foo (cdr x))
1649 (y bar (cdr y))
1650 (z nil (cons (f (car x) (car y)) z)))
1651 ((or (null x) (null y))
1652 (nreverse z)))
4009494e 1653@end example
e1117425 1654@end defmac
4009494e 1655
e1117425 1656@defmac cl-do* (spec@dots{}) (end-test [result@dots{}]) forms@dots{}
39a58b5b 1657This is to @code{cl-do} what @code{let*} is to @code{let}. In
4009494e
GM
1658particular, the initial values are bound as if by @code{let*}
1659rather than @code{let}, and the steps are assigned as if by
8d6510b9 1660@code{setq} rather than @code{cl-psetq}.
4009494e
GM
1661
1662Here is another way to write the above loop:
1663
1664@example
39a58b5b
GM
1665(cl-do* ((xp foo (cdr xp))
1666 (yp bar (cdr yp))
1667 (x (car xp) (car xp))
1668 (y (car yp) (car yp))
1669 z)
4009494e
GM
1670 ((or (null xp) (null yp))
1671 (nreverse z))
1672 (push (f x y) z))
1673@end example
e1117425 1674@end defmac
4009494e 1675
e1117425 1676@defmac cl-dolist (var list [result]) forms@dots{}
9f2881af
GM
1677This is exactly like the standard Emacs Lisp macro @code{dolist},
1678but surrounds the loop with an implicit @code{nil} block.
e1117425 1679@end defmac
4009494e 1680
e1117425 1681@defmac cl-dotimes (var count [result]) forms@dots{}
9f2881af
GM
1682This is exactly like the standard Emacs Lisp macro @code{dotimes},
1683but surrounds the loop with an implicit @code{nil} block.
1684The body is executed with @var{var} bound to the integers
4009494e 1685from zero (inclusive) to @var{count} (exclusive), in turn. Then
9f2881af 1686@c FIXME lispref does not state this part explicitly, could move this there.
4009494e
GM
1687the @code{result} form is evaluated with @var{var} bound to the total
1688number of iterations that were done (i.e., @code{(max 0 @var{count})})
9f2881af 1689to get the return value for the loop form.
e1117425 1690@end defmac
4009494e 1691
e1117425 1692@defmac cl-do-symbols (var [obarray [result]]) forms@dots{}
4009494e
GM
1693This loop iterates over all interned symbols. If @var{obarray}
1694is specified and is not @code{nil}, it loops over all symbols in
1695that obarray. For each symbol, the body @var{forms} are evaluated
1696with @var{var} bound to that symbol. The symbols are visited in
1697an unspecified order. Afterward the @var{result} form, if any,
1698is evaluated (with @var{var} bound to @code{nil}) to get the return
1699value. The loop is surrounded by an implicit @code{nil} block.
e1117425 1700@end defmac
4009494e 1701
e1117425 1702@defmac cl-do-all-symbols (var [result]) forms@dots{}
39a58b5b 1703This is identical to @code{cl-do-symbols} except that the @var{obarray}
4009494e 1704argument is omitted; it always iterates over the default obarray.
e1117425 1705@end defmac
4009494e
GM
1706
1707@xref{Mapping over Sequences}, for some more functions for
1708iterating over vectors or lists.
1709
1d5b82ef 1710@node Loop Facility
4009494e
GM
1711@section Loop Facility
1712
1713@noindent
c65b407b
GM
1714A common complaint with Lisp's traditional looping constructs was
1715that they were either too simple and limited, such as @code{dotimes}
1716or @code{while}, or too unreadable and obscure, like Common Lisp's
1717@code{do} loop.
4009494e 1718
c65b407b
GM
1719To remedy this, Common Lisp added a construct called the ``Loop
1720Facility'' or ``@code{loop} macro'', with an easy-to-use but very
1721powerful and expressive syntax.
4009494e
GM
1722
1723@menu
c65b407b
GM
1724* Loop Basics:: The @code{cl-loop} macro, basic clause structure.
1725* Loop Examples:: Working examples of the @code{cl-loop} macro.
8d6510b9 1726* For Clauses:: Clauses introduced by @code{for} or @code{as}.
53eced6d
GM
1727* Iteration Clauses:: @code{repeat}, @code{while}, @code{thereis}, etc.
1728* Accumulation Clauses:: @code{collect}, @code{sum}, @code{maximize}, etc.
8d6510b9 1729* Other Clauses:: @code{with}, @code{if}, @code{initially}, @code{finally}.
4009494e
GM
1730@end menu
1731
1d5b82ef 1732@node Loop Basics
4009494e
GM
1733@subsection Loop Basics
1734
1735@noindent
39a58b5b 1736The @code{cl-loop} macro essentially creates a mini-language within
4009494e
GM
1737Lisp that is specially tailored for describing loops. While this
1738language is a little strange-looking by the standards of regular Lisp,
1739it turns out to be very easy to learn and well-suited to its purpose.
1740
39a58b5b
GM
1741Since @code{cl-loop} is a macro, all parsing of the loop language
1742takes place at byte-compile time; compiled @code{cl-loop}s are just
4009494e
GM
1743as efficient as the equivalent @code{while} loops written longhand.
1744
e1117425 1745@defmac cl-loop clauses@dots{}
4009494e
GM
1746A loop construct consists of a series of @var{clause}s, each
1747introduced by a symbol like @code{for} or @code{do}. Clauses
39a58b5b 1748are simply strung together in the argument list of @code{cl-loop},
4009494e
GM
1749with minimal extra parentheses. The various types of clauses
1750specify initializations, such as the binding of temporary
1751variables, actions to be taken in the loop, stepping actions,
1752and final cleanup.
1753
1754Common Lisp specifies a certain general order of clauses in a
1755loop:
1756
1757@example
c65b407b
GM
1758(loop @var{name-clause}
1759 @var{var-clauses}@dots{}
1760 @var{action-clauses}@dots{})
4009494e
GM
1761@end example
1762
1763The @var{name-clause} optionally gives a name to the implicit
1764block that surrounds the loop. By default, the implicit block
1765is named @code{nil}. The @var{var-clauses} specify what
1766variables should be bound during the loop, and how they should
1767be modified or iterated throughout the course of the loop. The
1768@var{action-clauses} are things to be done during the loop, such
1769as computing, collecting, and returning values.
1770
39a58b5b 1771The Emacs version of the @code{cl-loop} macro is less restrictive about
4009494e
GM
1772the order of clauses, but things will behave most predictably if
1773you put the variable-binding clauses @code{with}, @code{for}, and
1774@code{repeat} before the action clauses. As in Common Lisp,
1775@code{initially} and @code{finally} clauses can go anywhere.
1776
1777Loops generally return @code{nil} by default, but you can cause
1778them to return a value by using an accumulation clause like
1779@code{collect}, an end-test clause like @code{always}, or an
1780explicit @code{return} clause to jump out of the implicit block.
1781(Because the loop body is enclosed in an implicit block, you can
a05cb6e3 1782also use regular Lisp @code{cl-return} or @code{cl-return-from} to
4009494e 1783break out of the loop.)
e1117425 1784@end defmac
4009494e 1785
c65b407b 1786The following sections give some examples of the loop macro in
4009494e 1787action, and describe the particular loop clauses in great detail.
9f2881af 1788Consult the second edition of Steele for additional discussion
c65b407b 1789and examples.
4009494e 1790
1d5b82ef 1791@node Loop Examples
4009494e
GM
1792@subsection Loop Examples
1793
1794@noindent
1795Before listing the full set of clauses that are allowed, let's
39a58b5b 1796look at a few example loops just to get a feel for the @code{cl-loop}
4009494e
GM
1797language.
1798
1799@example
39a58b5b
GM
1800(cl-loop for buf in (buffer-list)
1801 collect (buffer-file-name buf))
4009494e
GM
1802@end example
1803
1804@noindent
1805This loop iterates over all Emacs buffers, using the list
a05cb6e3 1806returned by @code{buffer-list}. For each buffer @var{buf},
4009494e 1807it calls @code{buffer-file-name} and collects the results into
39a58b5b 1808a list, which is then returned from the @code{cl-loop} construct.
4009494e 1809The result is a list of the file names of all the buffers in
44e97401 1810Emacs's memory. The words @code{for}, @code{in}, and @code{collect}
39a58b5b 1811are reserved words in the @code{cl-loop} language.
4009494e
GM
1812
1813@example
39a58b5b 1814(cl-loop repeat 20 do (insert "Yowsa\n"))
4009494e
GM
1815@end example
1816
1817@noindent
1818This loop inserts the phrase ``Yowsa'' twenty times in the
1819current buffer.
1820
1821@example
39a58b5b 1822(cl-loop until (eobp) do (munch-line) (forward-line 1))
4009494e
GM
1823@end example
1824
1825@noindent
1826This loop calls @code{munch-line} on every line until the end
1827of the buffer. If point is already at the end of the buffer,
1828the loop exits immediately.
1829
1830@example
39a58b5b 1831(cl-loop do (munch-line) until (eobp) do (forward-line 1))
4009494e
GM
1832@end example
1833
1834@noindent
1835This loop is similar to the above one, except that @code{munch-line}
1836is always called at least once.
1837
1838@example
39a58b5b
GM
1839(cl-loop for x from 1 to 100
1840 for y = (* x x)
1841 until (>= y 729)
1842 finally return (list x (= y 729)))
4009494e
GM
1843@end example
1844
1845@noindent
1846This more complicated loop searches for a number @code{x} whose
1847square is 729. For safety's sake it only examines @code{x}
1848values up to 100; dropping the phrase @samp{to 100} would
1849cause the loop to count upwards with no limit. The second
1850@code{for} clause defines @code{y} to be the square of @code{x}
1851within the loop; the expression after the @code{=} sign is
1852reevaluated each time through the loop. The @code{until}
1853clause gives a condition for terminating the loop, and the
1854@code{finally} clause says what to do when the loop finishes.
1855(This particular example was written less concisely than it
1856could have been, just for the sake of illustration.)
1857
1858Note that even though this loop contains three clauses (two
1859@code{for}s and an @code{until}) that would have been enough to
1860define loops all by themselves, it still creates a single loop
1861rather than some sort of triple-nested loop. You must explicitly
39a58b5b 1862nest your @code{cl-loop} constructs if you want nested loops.
4009494e 1863
1d5b82ef 1864@node For Clauses
4009494e
GM
1865@subsection For Clauses
1866
1867@noindent
1868Most loops are governed by one or more @code{for} clauses.
1869A @code{for} clause simultaneously describes variables to be
1870bound, how those variables are to be stepped during the loop,
1871and usually an end condition based on those variables.
1872
1873The word @code{as} is a synonym for the word @code{for}. This
1874word is followed by a variable name, then a word like @code{from}
1875or @code{across} that describes the kind of iteration desired.
1876In Common Lisp, the phrase @code{being the} sometimes precedes
1877the type of iteration; in this package both @code{being} and
1878@code{the} are optional. The word @code{each} is a synonym
1879for @code{the}, and the word that follows it may be singular
1880or plural: @samp{for x being the elements of y} or
1881@samp{for x being each element of y}. Which form you use
1882is purely a matter of style.
1883
1884The variable is bound around the loop as if by @code{let}:
1885
1886@example
1887(setq i 'happy)
39a58b5b 1888(cl-loop for i from 1 to 10 do (do-something-with i))
4009494e
GM
1889i
1890 @result{} happy
1891@end example
1892
1893@table @code
1894@item for @var{var} from @var{expr1} to @var{expr2} by @var{expr3}
1895This type of @code{for} clause creates a counting loop. Each of
1896the three sub-terms is optional, though there must be at least one
1897term so that the clause is marked as a counting clause.
1898
1899The three expressions are the starting value, the ending value, and
1900the step value, respectively, of the variable. The loop counts
1901upwards by default (@var{expr3} must be positive), from @var{expr1}
1902to @var{expr2} inclusively. If you omit the @code{from} term, the
1903loop counts from zero; if you omit the @code{to} term, the loop
1904counts forever without stopping (unless stopped by some other
1905loop clause, of course); if you omit the @code{by} term, the loop
1906counts in steps of one.
1907
1908You can replace the word @code{from} with @code{upfrom} or
1909@code{downfrom} to indicate the direction of the loop. Likewise,
1910you can replace @code{to} with @code{upto} or @code{downto}.
1911For example, @samp{for x from 5 downto 1} executes five times
1912with @code{x} taking on the integers from 5 down to 1 in turn.
1913Also, you can replace @code{to} with @code{below} or @code{above},
1914which are like @code{upto} and @code{downto} respectively except
1915that they are exclusive rather than inclusive limits:
1916
1917@example
39a58b5b
GM
1918(cl-loop for x to 10 collect x)
1919 @result{} (0 1 2 3 4 5 6 7 8 9 10)
1920(cl-loop for x below 10 collect x)
1921 @result{} (0 1 2 3 4 5 6 7 8 9)
4009494e
GM
1922@end example
1923
1924The @code{by} value is always positive, even for downward-counting
1925loops. Some sort of @code{from} value is required for downward
1926loops; @samp{for x downto 5} is not a valid loop clause all by
1927itself.
1928
1929@item for @var{var} in @var{list} by @var{function}
1930This clause iterates @var{var} over all the elements of @var{list},
1931in turn. If you specify the @code{by} term, then @var{function}
1932is used to traverse the list instead of @code{cdr}; it must be a
1933function taking one argument. For example:
1934
1935@example
39a58b5b
GM
1936(cl-loop for x in '(1 2 3 4 5 6) collect (* x x))
1937 @result{} (1 4 9 16 25 36)
1938(cl-loop for x in '(1 2 3 4 5 6) by 'cddr collect (* x x))
1939 @result{} (1 9 25)
4009494e
GM
1940@end example
1941
1942@item for @var{var} on @var{list} by @var{function}
1943This clause iterates @var{var} over all the cons cells of @var{list}.
1944
1945@example
39a58b5b
GM
1946(cl-loop for x on '(1 2 3 4) collect x)
1947 @result{} ((1 2 3 4) (2 3 4) (3 4) (4))
4009494e
GM
1948@end example
1949
1950With @code{by}, there is no real reason that the @code{on} expression
1951must be a list. For example:
1952
1953@example
39a58b5b 1954(cl-loop for x on first-animal by 'next-animal collect x)
4009494e
GM
1955@end example
1956
1957@noindent
1958where @code{(next-animal x)} takes an ``animal'' @var{x} and returns
1959the next in the (assumed) sequence of animals, or @code{nil} if
1960@var{x} was the last animal in the sequence.
1961
1962@item for @var{var} in-ref @var{list} by @var{function}
1963This is like a regular @code{in} clause, but @var{var} becomes
1964a @code{setf}-able ``reference'' onto the elements of the list
1965rather than just a temporary variable. For example,
1966
1967@example
39a58b5b 1968(cl-loop for x in-ref my-list do (cl-incf x))
4009494e
GM
1969@end example
1970
1971@noindent
1972increments every element of @code{my-list} in place. This clause
1973is an extension to standard Common Lisp.
1974
1975@item for @var{var} across @var{array}
1976This clause iterates @var{var} over all the elements of @var{array},
1977which may be a vector or a string.
1978
1979@example
39a58b5b
GM
1980(cl-loop for x across "aeiou"
1981 do (use-vowel (char-to-string x)))
4009494e
GM
1982@end example
1983
1984@item for @var{var} across-ref @var{array}
1985This clause iterates over an array, with @var{var} a @code{setf}-able
1986reference onto the elements; see @code{in-ref} above.
1987
1988@item for @var{var} being the elements of @var{sequence}
1989This clause iterates over the elements of @var{sequence}, which may
1990be a list, vector, or string. Since the type must be determined
1991at run-time, this is somewhat less efficient than @code{in} or
1992@code{across}. The clause may be followed by the additional term
1993@samp{using (index @var{var2})} to cause @var{var2} to be bound to
1994the successive indices (starting at 0) of the elements.
1995
1996This clause type is taken from older versions of the @code{loop} macro,
df43dd53 1997and is not present in modern Common Lisp. The @samp{using (sequence @dots{})}
4009494e
GM
1998term of the older macros is not supported.
1999
2000@item for @var{var} being the elements of-ref @var{sequence}
2001This clause iterates over a sequence, with @var{var} a @code{setf}-able
2002reference onto the elements; see @code{in-ref} above.
2003
2004@item for @var{var} being the symbols [of @var{obarray}]
2005This clause iterates over symbols, either over all interned symbols
2006or over all symbols in @var{obarray}. The loop is executed with
2007@var{var} bound to each symbol in turn. The symbols are visited in
2008an unspecified order.
2009
2010As an example,
2011
2012@example
39a58b5b
GM
2013(cl-loop for sym being the symbols
2014 when (fboundp sym)
2015 when (string-match "^map" (symbol-name sym))
2016 collect sym)
4009494e
GM
2017@end example
2018
2019@noindent
2020returns a list of all the functions whose names begin with @samp{map}.
2021
2022The Common Lisp words @code{external-symbols} and @code{present-symbols}
2023are also recognized but are equivalent to @code{symbols} in Emacs Lisp.
2024
2025Due to a minor implementation restriction, it will not work to have
2026more than one @code{for} clause iterating over symbols, hash tables,
39a58b5b 2027keymaps, overlays, or intervals in a given @code{cl-loop}. Fortunately,
4009494e 2028it would rarely if ever be useful to do so. It @emph{is} valid to mix
df43dd53 2029one of these types of clauses with other clauses like @code{for @dots{} to}
4009494e
GM
2030or @code{while}.
2031
2032@item for @var{var} being the hash-keys of @var{hash-table}
79414ae4
KR
2033@itemx for @var{var} being the hash-values of @var{hash-table}
2034This clause iterates over the entries in @var{hash-table} with
2035@var{var} bound to each key, or value. A @samp{using} clause can bind
2036a second variable to the opposite part.
2037
2038@example
39a58b5b
GM
2039(cl-loop for k being the hash-keys of h
2040 using (hash-values v)
2041 do
2042 (message "key %S -> value %S" k v))
79414ae4 2043@end example
4009494e
GM
2044
2045@item for @var{var} being the key-codes of @var{keymap}
79414ae4 2046@itemx for @var{var} being the key-bindings of @var{keymap}
4009494e 2047This clause iterates over the entries in @var{keymap}.
36374111
SM
2048The iteration does not enter nested keymaps but does enter inherited
2049(parent) keymaps.
79414ae4
KR
2050A @code{using} clause can access both the codes and the bindings
2051together.
2052
2053@example
39a58b5b
GM
2054(cl-loop for c being the key-codes of (current-local-map)
2055 using (key-bindings b)
2056 do
2057 (message "key %S -> binding %S" c b))
79414ae4
KR
2058@end example
2059
4009494e
GM
2060
2061@item for @var{var} being the key-seqs of @var{keymap}
2062This clause iterates over all key sequences defined by @var{keymap}
2063and its nested keymaps, where @var{var} takes on values which are
2064vectors. The strings or vectors
2065are reused for each iteration, so you must copy them if you wish to keep
df43dd53 2066them permanently. You can add a @samp{using (key-bindings @dots{})}
4009494e
GM
2067clause to get the command bindings as well.
2068
2069@item for @var{var} being the overlays [of @var{buffer}] @dots{}
2070This clause iterates over the ``overlays'' of a buffer
2071(the clause @code{extents} is synonymous
2072with @code{overlays}). If the @code{of} term is omitted, the current
2073buffer is used.
2074This clause also accepts optional @samp{from @var{pos}} and
2075@samp{to @var{pos}} terms, limiting the clause to overlays which
2076overlap the specified region.
2077
2078@item for @var{var} being the intervals [of @var{buffer}] @dots{}
2079This clause iterates over all intervals of a buffer with constant
2080text properties. The variable @var{var} will be bound to conses
2081of start and end positions, where one start position is always equal
2082to the previous end position. The clause allows @code{of},
2083@code{from}, @code{to}, and @code{property} terms, where the latter
2084term restricts the search to just the specified property. The
2085@code{of} term may specify either a buffer or a string.
2086
2087@item for @var{var} being the frames
7dde1a86
GM
2088This clause iterates over all Emacs frames. The clause @code{screens} is
2089a synonym for @code{frames}. The frames are visited in
2090@code{next-frame} order starting from @code{selected-frame}.
4009494e
GM
2091
2092@item for @var{var} being the windows [of @var{frame}]
2093This clause iterates over the windows (in the Emacs sense) of
7dde1a86
GM
2094the current frame, or of the specified @var{frame}. It visits windows
2095in @code{next-window} order starting from @code{selected-window}
2096(or @code{frame-selected-window} if you specify @var{frame}).
2097This clause treats the minibuffer window in the same way as
2098@code{next-window} does. For greater flexibility, consider using
2099@code{walk-windows} instead.
4009494e
GM
2100
2101@item for @var{var} being the buffers
2102This clause iterates over all buffers in Emacs. It is equivalent
2103to @samp{for @var{var} in (buffer-list)}.
2104
2105@item for @var{var} = @var{expr1} then @var{expr2}
2106This clause does a general iteration. The first time through
2107the loop, @var{var} will be bound to @var{expr1}. On the second
2108and successive iterations it will be set by evaluating @var{expr2}
2109(which may refer to the old value of @var{var}). For example,
2110these two loops are effectively the same:
2111
2112@example
df43dd53
GM
2113(cl-loop for x on my-list by 'cddr do @dots{})
2114(cl-loop for x = my-list then (cddr x) while x do @dots{})
4009494e
GM
2115@end example
2116
2117Note that this type of @code{for} clause does not imply any sort
2118of terminating condition; the above example combines it with a
2119@code{while} clause to tell when to end the loop.
2120
2121If you omit the @code{then} term, @var{expr1} is used both for
2122the initial setting and for successive settings:
2123
2124@example
39a58b5b 2125(cl-loop for x = (random) when (> x 0) return x)
4009494e
GM
2126@end example
2127
2128@noindent
2129This loop keeps taking random numbers from the @code{(random)}
2130function until it gets a positive one, which it then returns.
2131@end table
2132
2133If you include several @code{for} clauses in a row, they are
2134treated sequentially (as if by @code{let*} and @code{setq}).
2135You can instead use the word @code{and} to link the clauses,
2136in which case they are processed in parallel (as if by @code{let}
8d6510b9 2137and @code{cl-psetq}).
4009494e
GM
2138
2139@example
39a58b5b
GM
2140(cl-loop for x below 5 for y = nil then x collect (list x y))
2141 @result{} ((0 nil) (1 1) (2 2) (3 3) (4 4))
2142(cl-loop for x below 5 and y = nil then x collect (list x y))
2143 @result{} ((0 nil) (1 0) (2 1) (3 2) (4 3))
4009494e
GM
2144@end example
2145
2146@noindent
2147In the first loop, @code{y} is set based on the value of @code{x}
2148that was just set by the previous clause; in the second loop,
2149@code{x} and @code{y} are set simultaneously so @code{y} is set
2150based on the value of @code{x} left over from the previous time
2151through the loop.
2152
c65b407b
GM
2153Another feature of the @code{cl-loop} macro is @emph{destructuring},
2154similar in concept to the destructuring provided by @code{defmacro}
2155(@pxref{Argument Lists}).
4009494e
GM
2156The @var{var} part of any @code{for} clause can be given as a list
2157of variables instead of a single variable. The values produced
2158during loop execution must be lists; the values in the lists are
2159stored in the corresponding variables.
2160
2161@example
39a58b5b
GM
2162(cl-loop for (x y) in '((2 3) (4 5) (6 7)) collect (+ x y))
2163 @result{} (5 9 13)
4009494e
GM
2164@end example
2165
2166In loop destructuring, if there are more values than variables
2167the trailing values are ignored, and if there are more variables
2168than values the trailing variables get the value @code{nil}.
2169If @code{nil} is used as a variable name, the corresponding
2170values are ignored. Destructuring may be nested, and dotted
c0a8ae95
KR
2171lists of variables like @code{(x . y)} are allowed, so for example
2172to process an alist
2173
2174@example
39a58b5b
GM
2175(cl-loop for (key . value) in '((a . 1) (b . 2))
2176 collect value)
2177 @result{} (1 2)
c0a8ae95 2178@end example
4009494e 2179
1d5b82ef 2180@node Iteration Clauses
4009494e
GM
2181@subsection Iteration Clauses
2182
2183@noindent
2184Aside from @code{for} clauses, there are several other loop clauses
2185that control the way the loop operates. They might be used by
2186themselves, or in conjunction with one or more @code{for} clauses.
2187
2188@table @code
2189@item repeat @var{integer}
2190This clause simply counts up to the specified number using an
2191internal temporary variable. The loops
2192
2193@example
df43dd53
GM
2194(cl-loop repeat (1+ n) do @dots{})
2195(cl-loop for temp to n do @dots{})
4009494e
GM
2196@end example
2197
2198@noindent
2199are identical except that the second one forces you to choose
2200a name for a variable you aren't actually going to use.
2201
2202@item while @var{condition}
2203This clause stops the loop when the specified condition (any Lisp
2204expression) becomes @code{nil}. For example, the following two
2205loops are equivalent, except for the implicit @code{nil} block
2206that surrounds the second one:
2207
2208@example
2209(while @var{cond} @var{forms}@dots{})
39a58b5b 2210(cl-loop while @var{cond} do @var{forms}@dots{})
4009494e
GM
2211@end example
2212
2213@item until @var{condition}
2214This clause stops the loop when the specified condition is true,
2215i.e., non-@code{nil}.
2216
2217@item always @var{condition}
2218This clause stops the loop when the specified condition is @code{nil}.
2219Unlike @code{while}, it stops the loop using @code{return nil} so that
2220the @code{finally} clauses are not executed. If all the conditions
2221were non-@code{nil}, the loop returns @code{t}:
2222
2223@example
39a58b5b 2224(if (cl-loop for size in size-list always (> size 10))
4009494e
GM
2225 (some-big-sizes)
2226 (no-big-sizes))
2227@end example
2228
2229@item never @var{condition}
2230This clause is like @code{always}, except that the loop returns
2231@code{t} if any conditions were false, or @code{nil} otherwise.
2232
2233@item thereis @var{condition}
2234This clause stops the loop when the specified form is non-@code{nil};
2235in this case, it returns that non-@code{nil} value. If all the
2236values were @code{nil}, the loop returns @code{nil}.
2237@end table
2238
1d5b82ef 2239@node Accumulation Clauses
4009494e
GM
2240@subsection Accumulation Clauses
2241
2242@noindent
2243These clauses cause the loop to accumulate information about the
2244specified Lisp @var{form}. The accumulated result is returned
2245from the loop unless overridden, say, by a @code{return} clause.
2246
2247@table @code
2248@item collect @var{form}
2249This clause collects the values of @var{form} into a list. Several
2250examples of @code{collect} appear elsewhere in this manual.
2251
2252The word @code{collecting} is a synonym for @code{collect}, and
2253likewise for the other accumulation clauses.
2254
2255@item append @var{form}
2256This clause collects lists of values into a result list using
2257@code{append}.
2258
2259@item nconc @var{form}
2260This clause collects lists of values into a result list by
2261destructively modifying the lists rather than copying them.
2262
2263@item concat @var{form}
2264This clause concatenates the values of the specified @var{form}
2265into a string. (It and the following clause are extensions to
2266standard Common Lisp.)
2267
2268@item vconcat @var{form}
2269This clause concatenates the values of the specified @var{form}
2270into a vector.
2271
2272@item count @var{form}
2273This clause counts the number of times the specified @var{form}
2274evaluates to a non-@code{nil} value.
2275
2276@item sum @var{form}
2277This clause accumulates the sum of the values of the specified
2278@var{form}, which must evaluate to a number.
2279
2280@item maximize @var{form}
2281This clause accumulates the maximum value of the specified @var{form},
2282which must evaluate to a number. The return value is undefined if
2283@code{maximize} is executed zero times.
2284
2285@item minimize @var{form}
2286This clause accumulates the minimum value of the specified @var{form}.
2287@end table
2288
2289Accumulation clauses can be followed by @samp{into @var{var}} to
2290cause the data to be collected into variable @var{var} (which is
2291automatically @code{let}-bound during the loop) rather than an
2292unnamed temporary variable. Also, @code{into} accumulations do
2293not automatically imply a return value. The loop must use some
2294explicit mechanism, such as @code{finally return}, to return
2295the accumulated result.
2296
2297It is valid for several accumulation clauses of the same type to
2298accumulate into the same place. From Steele:
2299
2300@example
39a58b5b
GM
2301(cl-loop for name in '(fred sue alice joe june)
2302 for kids in '((bob ken) () () (kris sunshine) ())
2303 collect name
2304 append kids)
2305 @result{} (fred bob ken sue alice joe kris sunshine june)
4009494e
GM
2306@end example
2307
1d5b82ef 2308@node Other Clauses
4009494e
GM
2309@subsection Other Clauses
2310
2311@noindent
2312This section describes the remaining loop clauses.
2313
2314@table @code
2315@item with @var{var} = @var{value}
2316This clause binds a variable to a value around the loop, but
2317otherwise leaves the variable alone during the loop. The following
2318loops are basically equivalent:
2319
2320@example
df43dd53
GM
2321(cl-loop with x = 17 do @dots{})
2322(let ((x 17)) (cl-loop do @dots{}))
2323(cl-loop for x = 17 then x do @dots{})
4009494e
GM
2324@end example
2325
2326Naturally, the variable @var{var} might be used for some purpose
2327in the rest of the loop. For example:
2328
2329@example
39a58b5b
GM
2330(cl-loop for x in my-list with res = nil do (push x res)
2331 finally return res)
4009494e
GM
2332@end example
2333
2334This loop inserts the elements of @code{my-list} at the front of
2335a new list being accumulated in @code{res}, then returns the
2336list @code{res} at the end of the loop. The effect is similar
2337to that of a @code{collect} clause, but the list gets reversed
2338by virtue of the fact that elements are being pushed onto the
2339front of @code{res} rather than the end.
2340
2341If you omit the @code{=} term, the variable is initialized to
2342@code{nil}. (Thus the @samp{= nil} in the above example is
2343unnecessary.)
2344
2345Bindings made by @code{with} are sequential by default, as if
2346by @code{let*}. Just like @code{for} clauses, @code{with} clauses
2347can be linked with @code{and} to cause the bindings to be made by
2348@code{let} instead.
2349
2350@item if @var{condition} @var{clause}
2351This clause executes the following loop clause only if the specified
2352condition is true. The following @var{clause} should be an accumulation,
2353@code{do}, @code{return}, @code{if}, or @code{unless} clause.
2354Several clauses may be linked by separating them with @code{and}.
2355These clauses may be followed by @code{else} and a clause or clauses
2356to execute if the condition was false. The whole construct may
2357optionally be followed by the word @code{end} (which may be used to
2358disambiguate an @code{else} or @code{and} in a nested @code{if}).
2359
2360The actual non-@code{nil} value of the condition form is available
2361by the name @code{it} in the ``then'' part. For example:
2362
2363@example
2364(setq funny-numbers '(6 13 -1))
2365 @result{} (6 13 -1)
39a58b5b 2366(cl-loop for x below 10
c65b407b 2367 if (cl-oddp x)
39a58b5b
GM
2368 collect x into odds
2369 and if (memq x funny-numbers) return (cdr it) end
2370 else
2371 collect x into evens
2372 finally return (vector odds evens))
2373 @result{} [(1 3 5 7 9) (0 2 4 6 8)]
4009494e
GM
2374(setq funny-numbers '(6 7 13 -1))
2375 @result{} (6 7 13 -1)
39a58b5b
GM
2376(cl-loop <@r{same thing again}>)
2377 @result{} (13 -1)
4009494e
GM
2378@end example
2379
2380Note the use of @code{and} to put two clauses into the ``then''
2381part, one of which is itself an @code{if} clause. Note also that
2382@code{end}, while normally optional, was necessary here to make
2383it clear that the @code{else} refers to the outermost @code{if}
2384clause. In the first case, the loop returns a vector of lists
2385of the odd and even values of @var{x}. In the second case, the
2386odd number 7 is one of the @code{funny-numbers} so the loop
2387returns early; the actual returned value is based on the result
2388of the @code{memq} call.
2389
2390@item when @var{condition} @var{clause}
2391This clause is just a synonym for @code{if}.
2392
2393@item unless @var{condition} @var{clause}
2394The @code{unless} clause is just like @code{if} except that the
2395sense of the condition is reversed.
2396
2397@item named @var{name}
2398This clause gives a name other than @code{nil} to the implicit
2399block surrounding the loop. The @var{name} is the symbol to be
2400used as the block name.
2401
df43dd53 2402@item initially [do] @var{forms}@dots{}
4009494e
GM
2403This keyword introduces one or more Lisp forms which will be
2404executed before the loop itself begins (but after any variables
2405requested by @code{for} or @code{with} have been bound to their
2406initial values). @code{initially} clauses can appear anywhere;
2407if there are several, they are executed in the order they appear
2408in the loop. The keyword @code{do} is optional.
2409
df43dd53 2410@item finally [do] @var{forms}@dots{}
4009494e
GM
2411This introduces Lisp forms which will be executed after the loop
2412finishes (say, on request of a @code{for} or @code{while}).
2413@code{initially} and @code{finally} clauses may appear anywhere
2414in the loop construct, but they are executed (in the specified
2415order) at the beginning or end, respectively, of the loop.
2416
2417@item finally return @var{form}
2418This says that @var{form} should be executed after the loop
2419is done to obtain a return value. (Without this, or some other
2420clause like @code{collect} or @code{return}, the loop will simply
2421return @code{nil}.) Variables bound by @code{for}, @code{with},
2422or @code{into} will still contain their final values when @var{form}
2423is executed.
2424
df43dd53 2425@item do @var{forms}@dots{}
4009494e
GM
2426The word @code{do} may be followed by any number of Lisp expressions
2427which are executed as an implicit @code{progn} in the body of the
2428loop. Many of the examples in this section illustrate the use of
2429@code{do}.
2430
2431@item return @var{form}
2432This clause causes the loop to return immediately. The following
c65b407b 2433Lisp form is evaluated to give the return value of the loop
4009494e
GM
2434form. The @code{finally} clauses, if any, are not executed.
2435Of course, @code{return} is generally used inside an @code{if} or
2436@code{unless}, as its use in a top-level loop clause would mean
2437the loop would never get to ``loop'' more than once.
2438
2439The clause @samp{return @var{form}} is equivalent to
c65b407b 2440@samp{do (cl-return @var{form})} (or @code{cl-return-from} if the loop
4009494e
GM
2441was named). The @code{return} clause is implemented a bit more
2442efficiently, though.
2443@end table
2444
d55911cf
GM
2445While there is no high-level way to add user extensions to @code{cl-loop},
2446this package does offer two properties called @code{cl-loop-handler}
2447and @code{cl-loop-for-handler} which are functions to be called when a
2448given symbol is encountered as a top-level loop clause or @code{for}
2449clause, respectively. Consult the source code in file
2450@file{cl-macs.el} for details.
4009494e 2451
39a58b5b 2452This package's @code{cl-loop} macro is compatible with that of Common
4009494e 2453Lisp, except that a few features are not implemented: @code{loop-finish}
c65b407b 2454and data-type specifiers. Naturally, the @code{for} clauses that
4009494e
GM
2455iterate over keymaps, overlays, intervals, frames, windows, and
2456buffers are Emacs-specific extensions.
2457
1d5b82ef 2458@node Multiple Values
4009494e
GM
2459@section Multiple Values
2460
2461@noindent
2462Common Lisp functions can return zero or more results. Emacs Lisp
2463functions, by contrast, always return exactly one result. This
2464package makes no attempt to emulate Common Lisp multiple return
2465values; Emacs versions of Common Lisp functions that return more
2466than one value either return just the first value (as in
d571e9c3
GM
2467@code{cl-compiler-macroexpand}) or return a list of values.
2468This package @emph{does} define placeholders
4009494e
GM
2469for the Common Lisp functions that work with multiple values, but
2470in Emacs Lisp these functions simply operate on lists instead.
f94b04fc 2471The @code{cl-values} form, for example, is a synonym for @code{list}
4009494e
GM
2472in Emacs.
2473
e1117425 2474@defmac cl-multiple-value-bind (var@dots{}) values-form forms@dots{}
4009494e
GM
2475This form evaluates @var{values-form}, which must return a list of
2476values. It then binds the @var{var}s to these respective values,
2477as if by @code{let}, and then executes the body @var{forms}.
2478If there are more @var{var}s than values, the extra @var{var}s
2479are bound to @code{nil}. If there are fewer @var{var}s than
2480values, the excess values are ignored.
e1117425 2481@end defmac
4009494e 2482
e1117425 2483@defmac cl-multiple-value-setq (var@dots{}) form
4009494e
GM
2484This form evaluates @var{form}, which must return a list of values.
2485It then sets the @var{var}s to these respective values, as if by
2486@code{setq}. Extra @var{var}s or values are treated the same as
39a58b5b 2487in @code{cl-multiple-value-bind}.
e1117425 2488@end defmac
4009494e 2489
4009494e
GM
2490Since a perfect emulation is not feasible in Emacs Lisp, this
2491package opts to keep it as simple and predictable as possible.
2492
1d5b82ef 2493@node Macros
4009494e
GM
2494@chapter Macros
2495
2496@noindent
2497This package implements the various Common Lisp features of
2498@code{defmacro}, such as destructuring, @code{&environment},
2499and @code{&body}. Top-level @code{&whole} is not implemented
2500for @code{defmacro} due to technical difficulties.
2501@xref{Argument Lists}.
2502
2503Destructuring is made available to the user by way of the
2504following macro:
2505
e1117425 2506@defmac cl-destructuring-bind arglist expr forms@dots{}
c65b407b 2507This macro expands to code that executes @var{forms}, with
4009494e
GM
2508the variables in @var{arglist} bound to the list of values
2509returned by @var{expr}. The @var{arglist} can include all
c65b407b 2510the features allowed for @code{cl-defmacro} argument lists,
4009494e
GM
2511including destructuring. (The @code{&environment} keyword
2512is not allowed.) The macro expansion will signal an error
2513if @var{expr} returns a list of the wrong number of arguments
2514or with incorrect keyword arguments.
e1117425 2515@end defmac
4009494e 2516
c65b407b 2517This package also includes the Common Lisp @code{define-compiler-macro}
4009494e
GM
2518facility, which allows you to define compile-time expansions and
2519optimizations for your functions.
2520
e1117425 2521@defmac cl-define-compiler-macro name arglist forms@dots{}
4009494e
GM
2522This form is similar to @code{defmacro}, except that it only expands
2523calls to @var{name} at compile-time; calls processed by the Lisp
2524interpreter are not expanded, nor are they expanded by the
2525@code{macroexpand} function.
2526
2527The argument list may begin with a @code{&whole} keyword and a
2528variable. This variable is bound to the macro-call form itself,
2529i.e., to a list of the form @samp{(@var{name} @var{args}@dots{})}.
2530If the macro expander returns this form unchanged, then the
2531compiler treats it as a normal function call. This allows
2532compiler macros to work as optimizers for special cases of a
2533function, leaving complicated cases alone.
2534
2535For example, here is a simplified version of a definition that
2536appears as a standard part of this package:
2537
2538@example
39a58b5b
GM
2539(cl-define-compiler-macro cl-member (&whole form a list &rest keys)
2540 (if (and (null keys)
2541 (eq (car-safe a) 'quote)
7fbf8f7b 2542 (not (floatp (cadr a))))
39a58b5b
GM
2543 (list 'memq a list)
2544 form))
4009494e
GM
2545@end example
2546
2547@noindent
39a58b5b 2548This definition causes @code{(cl-member @var{a} @var{list})} to change
4009494e
GM
2549to a call to the faster @code{memq} in the common case where @var{a}
2550is a non-floating-point constant; if @var{a} is anything else, or
2551if there are any keyword arguments in the call, then the original
39a58b5b
GM
2552@code{cl-member} call is left intact. (The actual compiler macro
2553for @code{cl-member} optimizes a number of other cases, including
4009494e 2554common @code{:test} predicates.)
e1117425 2555@end defmac
4009494e 2556
39a58b5b 2557@defun cl-compiler-macroexpand form
4009494e
GM
2558This function is analogous to @code{macroexpand}, except that it
2559expands compiler macros rather than regular macros. It returns
2560@var{form} unchanged if it is not a call to a function for which
2561a compiler macro has been defined, or if that compiler macro
2562decided to punt by returning its @code{&whole} argument. Like
2563@code{macroexpand}, it expands repeatedly until it reaches a form
2564for which no further expansion is possible.
2565@end defun
2566
39a58b5b
GM
2567@xref{Macro Bindings}, for descriptions of the @code{cl-macrolet}
2568and @code{cl-symbol-macrolet} forms for making ``local'' macro
4009494e
GM
2569definitions.
2570
1d5b82ef 2571@node Declarations
4009494e
GM
2572@chapter Declarations
2573
2574@noindent
2575Common Lisp includes a complex and powerful ``declaration''
2576mechanism that allows you to give the compiler special hints
2577about the types of data that will be stored in particular variables,
2578and about the ways those variables and functions will be used. This
2579package defines versions of all the Common Lisp declaration forms:
c65b407b
GM
2580@code{declare}, @code{locally}, @code{proclaim}, @code{declaim},
2581and @code{the}.
4009494e 2582
c65b407b
GM
2583Most of the Common Lisp declarations are not currently useful in Emacs
2584Lisp. For example, the byte-code system provides little
2585opportunity to benefit from type information.
2586@ignore
2587and @code{special} declarations are redundant in a fully
2588dynamically-scoped Lisp.
2589@end ignore
2590A few declarations are meaningful when byte compiler optimizations
2591are enabled, as they are by the default. Otherwise these
2592declarations will effectively be ignored.
4009494e 2593
39a58b5b 2594@defun cl-proclaim decl-spec
4009494e 2595This function records a ``global'' declaration specified by
39a58b5b 2596@var{decl-spec}. Since @code{cl-proclaim} is a function, @var{decl-spec}
4009494e
GM
2597is evaluated and thus should normally be quoted.
2598@end defun
2599
e1117425 2600@defmac cl-declaim decl-specs@dots{}
39a58b5b 2601This macro is like @code{cl-proclaim}, except that it takes any number
4009494e 2602of @var{decl-spec} arguments, and the arguments are unevaluated and
c65b407b 2603unquoted. The @code{cl-declaim} macro also puts @code{(cl-eval-when
df43dd53 2604(compile load eval) @dots{})} around the declarations so that they will
4009494e
GM
2605be registered at compile-time as well as at run-time. (This is vital,
2606since normally the declarations are meant to influence the way the
39a58b5b 2607compiler treats the rest of the file that contains the @code{cl-declaim}
4009494e 2608form.)
e1117425 2609@end defmac
4009494e 2610
e1117425 2611@defmac cl-declare decl-specs@dots{}
4009494e
GM
2612This macro is used to make declarations within functions and other
2613code. Common Lisp allows declarations in various locations, generally
2614at the beginning of any of the many ``implicit @code{progn}s''
2615throughout Lisp syntax, such as function bodies, @code{let} bodies,
39a58b5b 2616etc. Currently the only declaration understood by @code{cl-declare}
4009494e 2617is @code{special}.
e1117425 2618@end defmac
4009494e 2619
e1117425 2620@defmac cl-locally declarations@dots{} forms@dots{}
39a58b5b 2621In this package, @code{cl-locally} is no different from @code{progn}.
e1117425 2622@end defmac
4009494e 2623
e1117425 2624@defmac cl-the type form
39a58b5b 2625Type information provided by @code{cl-the} is ignored in this package;
c65b407b
GM
2626in other words, @code{(cl-the @var{type} @var{form})} is equivalent to
2627@var{form}. Future byte-compiler optimizations may make use of this
2628information.
4009494e
GM
2629
2630For example, @code{mapcar} can map over both lists and arrays. It is
2631hard for the compiler to expand @code{mapcar} into an in-line loop
2632unless it knows whether the sequence will be a list or an array ahead
39a58b5b 2633of time. With @code{(mapcar 'car (cl-the vector foo))}, a future
4009494e
GM
2634compiler would have enough information to expand the loop in-line.
2635For now, Emacs Lisp will treat the above code as exactly equivalent
2636to @code{(mapcar 'car foo)}.
e1117425 2637@end defmac
4009494e 2638
39a58b5b
GM
2639Each @var{decl-spec} in a @code{cl-proclaim}, @code{cl-declaim}, or
2640@code{cl-declare} should be a list beginning with a symbol that says
4009494e
GM
2641what kind of declaration it is. This package currently understands
2642@code{special}, @code{inline}, @code{notinline}, @code{optimize},
2643and @code{warn} declarations. (The @code{warn} declaration is an
2644extension of standard Common Lisp.) Other Common Lisp declarations,
2645such as @code{type} and @code{ftype}, are silently ignored.
2646
2647@table @code
2648@item special
c65b407b 2649@c FIXME ?
4009494e
GM
2650Since all variables in Emacs Lisp are ``special'' (in the Common
2651Lisp sense), @code{special} declarations are only advisory. They
c65b407b 2652simply tell the byte compiler that the specified
4009494e
GM
2653variables are intentionally being referred to without being
2654bound in the body of the function. The compiler normally emits
2655warnings for such references, since they could be typographical
2656errors for references to local variables.
2657
39a58b5b 2658The declaration @code{(cl-declare (special @var{var1} @var{var2}))} is
c65b407b 2659equivalent to @code{(defvar @var{var1}) (defvar @var{var2})}.
4009494e
GM
2660
2661In top-level contexts, it is generally better to write
39a58b5b 2662@code{(defvar @var{var})} than @code{(cl-declaim (special @var{var}))},
c65b407b 2663since @code{defvar} makes your intentions clearer.
4009494e
GM
2664
2665@item inline
2666The @code{inline} @var{decl-spec} lists one or more functions
2667whose bodies should be expanded ``in-line'' into calling functions
2668whenever the compiler is able to arrange for it. For example,
c65b407b
GM
2669the function @code{cl-acons} is declared @code{inline}
2670by this package so that the form @code{(cl-acons @var{key} @var{value}
2671@var{alist})} will
2672expand directly into @code{(cons (cons @var{key} @var{value}) @var{alist})}
2673when it is called in user functions, so as to save function calls.
4009494e
GM
2674
2675The following declarations are all equivalent. Note that the
2676@code{defsubst} form is a convenient way to define a function
2677and declare it inline all at once.
2678
2679@example
39a58b5b 2680(cl-declaim (inline foo bar))
a05cb6e3
GM
2681(cl-eval-when (compile load eval)
2682 (cl-proclaim '(inline foo bar)))
df43dd53 2683(defsubst foo (@dots{}) @dots{}) ; instead of defun
4009494e
GM
2684@end example
2685
2686@strong{Please note:} this declaration remains in effect after the
2687containing source file is done. It is correct to use it to
2688request that a function you have defined should be inlined,
2689but it is impolite to use it to request inlining of an external
2690function.
2691
c65b407b 2692In Common Lisp, it is possible to use @code{(declare (inline @dots{}))}
4009494e
GM
2693before a particular call to a function to cause just that call to
2694be inlined; the current byte compilers provide no way to implement
39a58b5b 2695this, so @code{(cl-declare (inline @dots{}))} is currently ignored by
4009494e
GM
2696this package.
2697
2698@item notinline
2699The @code{notinline} declaration lists functions which should
2700not be inlined after all; it cancels a previous @code{inline}
2701declaration.
2702
2703@item optimize
2704This declaration controls how much optimization is performed by
c65b407b 2705the compiler.
4009494e
GM
2706
2707The word @code{optimize} is followed by any number of lists like
2708@code{(speed 3)} or @code{(safety 2)}. Common Lisp defines several
2709optimization ``qualities''; this package ignores all but @code{speed}
2710and @code{safety}. The value of a quality should be an integer from
a05cb6e3 27110 to 3, with 0 meaning ``unimportant'' and 3 meaning ``very important''.
4009494e
GM
2712The default level for both qualities is 1.
2713
c65b407b 2714In this package, the @code{speed} quality is tied to the @code{byte-optimize}
4009494e
GM
2715flag, which is set to @code{nil} for @code{(speed 0)} and to
2716@code{t} for higher settings; and the @code{safety} quality is
2717tied to the @code{byte-compile-delete-errors} flag, which is
39ff2cf3 2718set to @code{nil} for @code{(safety 3)} and to @code{t} for all
4009494e
GM
2719lower settings. (The latter flag controls whether the compiler
2720is allowed to optimize out code whose only side-effect could
2721be to signal an error, e.g., rewriting @code{(progn foo bar)} to
2722@code{bar} when it is not known whether @code{foo} will be bound
2723at run-time.)
2724
2725Note that even compiling with @code{(safety 0)}, the Emacs
2726byte-code system provides sufficient checking to prevent real
2727harm from being done. For example, barring serious bugs in
2728Emacs itself, Emacs will not crash with a segmentation fault
2729just because of an error in a fully-optimized Lisp program.
2730
2731The @code{optimize} declaration is normally used in a top-level
39a58b5b 2732@code{cl-proclaim} or @code{cl-declaim} in a file; Common Lisp allows
c65b407b 2733it to be used with @code{declare} to set the level of optimization
4009494e 2734locally for a given form, but this will not work correctly with the
c65b407b 2735current byte-compiler. (The @code{cl-declare}
4009494e
GM
2736will set the new optimization level, but that level will not
2737automatically be unset after the enclosing form is done.)
2738
2739@item warn
2740This declaration controls what sorts of warnings are generated
c65b407b 2741by the byte compiler. The word @code{warn} is followed by any
a05cb6e3 2742number of ``warning qualities'', similar in form to optimization
4009494e
GM
2743qualities. The currently supported warning types are
2744@code{redefine}, @code{callargs}, @code{unresolved}, and
2745@code{free-vars}; in the current system, a value of 0 will
2746disable these warnings and any higher value will enable them.
c65b407b
GM
2747See the documentation of the variable @code{byte-compile-warnings}
2748for more details.
4009494e
GM
2749@end table
2750
1d5b82ef 2751@node Symbols
4009494e
GM
2752@chapter Symbols
2753
2754@noindent
2755This package defines several symbol-related features that were
2756missing from Emacs Lisp.
2757
2758@menu
39a58b5b
GM
2759* Property Lists:: @code{cl-get}, @code{cl-remprop}, @code{cl-getf}, @code{cl-remf}.
2760* Creating Symbols:: @code{cl-gensym}, @code{cl-gentemp}.
4009494e
GM
2761@end menu
2762
1d5b82ef 2763@node Property Lists
4009494e
GM
2764@section Property Lists
2765
2766@noindent
2767These functions augment the standard Emacs Lisp functions @code{get}
2768and @code{put} for operating on properties attached to symbols.
2769There are also functions for working with property lists as
2770first-class data structures not attached to particular symbols.
2771
39a58b5b 2772@defun cl-get symbol property &optional default
4009494e
GM
2773This function is like @code{get}, except that if the property is
2774not found, the @var{default} argument provides the return value.
2775(The Emacs Lisp @code{get} function always uses @code{nil} as
39a58b5b 2776the default; this package's @code{cl-get} is equivalent to Common
4009494e
GM
2777Lisp's @code{get}.)
2778
39a58b5b 2779The @code{cl-get} function is @code{setf}-able; when used in this
4009494e
GM
2780fashion, the @var{default} argument is allowed but ignored.
2781@end defun
2782
39a58b5b 2783@defun cl-remprop symbol property
4009494e
GM
2784This function removes the entry for @var{property} from the property
2785list of @var{symbol}. It returns a true value if the property was
2786indeed found and removed, or @code{nil} if there was no such property.
2787(This function was probably omitted from Emacs originally because,
2788since @code{get} did not allow a @var{default}, it was very difficult
2789to distinguish between a missing property and a property whose value
2790was @code{nil}; thus, setting a property to @code{nil} was close
39a58b5b 2791enough to @code{cl-remprop} for most purposes.)
4009494e
GM
2792@end defun
2793
39a58b5b 2794@defun cl-getf place property &optional default
4009494e
GM
2795This function scans the list @var{place} as if it were a property
2796list, i.e., a list of alternating property names and values. If
2797an even-numbered element of @var{place} is found which is @code{eq}
2798to @var{property}, the following odd-numbered element is returned.
2799Otherwise, @var{default} is returned (or @code{nil} if no default
2800is given).
2801
2802In particular,
2803
2804@example
516e1a08 2805(get sym prop) @equiv{} (cl-getf (symbol-plist sym) prop)
4009494e
GM
2806@end example
2807
516e1a08 2808It is valid to use @code{cl-getf} as a @code{setf} place, in which case
4009494e
GM
2809its @var{place} argument must itself be a valid @code{setf} place.
2810The @var{default} argument, if any, is ignored in this context.
2811The effect is to change (via @code{setcar}) the value cell in the
2812list that corresponds to @var{property}, or to cons a new property-value
2813pair onto the list if the property is not yet present.
2814
2815@example
df43dd53 2816(put sym prop val) @equiv{} (setf (cl-getf (symbol-plist sym) prop) val)
4009494e
GM
2817@end example
2818
39a58b5b 2819The @code{get} and @code{cl-get} functions are also @code{setf}-able.
4009494e
GM
2820The fact that @code{default} is ignored can sometimes be useful:
2821
2822@example
39a58b5b 2823(cl-incf (cl-get 'foo 'usage-count 0))
4009494e
GM
2824@end example
2825
2826Here, symbol @code{foo}'s @code{usage-count} property is incremented
2827if it exists, or set to 1 (an incremented 0) otherwise.
2828
516e1a08 2829When not used as a @code{setf} form, @code{cl-getf} is just a regular
4009494e
GM
2830function and its @var{place} argument can actually be any Lisp
2831expression.
2832@end defun
2833
e1117425 2834@defmac cl-remf place property
4009494e
GM
2835This macro removes the property-value pair for @var{property} from
2836the property list stored at @var{place}, which is any @code{setf}-able
2837place expression. It returns true if the property was found. Note
2838that if @var{property} happens to be first on the list, this will
2839effectively do a @code{(setf @var{place} (cddr @var{place}))},
2840whereas if it occurs later, this simply uses @code{setcdr} to splice
2841out the property and value cells.
e1117425 2842@end defmac
4009494e 2843
1d5b82ef 2844@node Creating Symbols
4009494e
GM
2845@section Creating Symbols
2846
2847@noindent
2848These functions create unique symbols, typically for use as
2849temporary variables.
2850
39a58b5b 2851@defun cl-gensym &optional x
4009494e
GM
2852This function creates a new, uninterned symbol (using @code{make-symbol})
2853with a unique name. (The name of an uninterned symbol is relevant
2854only if the symbol is printed.) By default, the name is generated
2855from an increasing sequence of numbers, @samp{G1000}, @samp{G1001},
2856@samp{G1002}, etc. If the optional argument @var{x} is a string, that
2857string is used as a prefix instead of @samp{G}. Uninterned symbols
2858are used in macro expansions for temporary variables, to ensure that
2859their names will not conflict with ``real'' variables in the user's
2860code.
4009494e 2861
92246540
GM
2862(Internally, the variable @code{cl--gensym-counter} holds the counter
2863used to generate names. It is incremented after each use. In Common
2864Lisp this is initialized with 0, but this package initializes it with
2865a random time-dependent value to avoid trouble when two files that
39a58b5b 2866each used @code{cl-gensym} in their compilation are loaded together.
92246540
GM
2867Uninterned symbols become interned when the compiler writes them out
2868to a file and the Emacs loader loads them, so their names have to be
2869treated a bit more carefully than in Common Lisp where uninterned
4009494e 2870symbols remain uninterned after loading.)
92246540 2871@end defun
4009494e 2872
39a58b5b
GM
2873@defun cl-gentemp &optional x
2874This function is like @code{cl-gensym}, except that it produces a new
4009494e
GM
2875@emph{interned} symbol. If the symbol that is generated already
2876exists, the function keeps incrementing the counter and trying
2877again until a new symbol is generated.
2878@end defun
2879
a6880551
GM
2880This package automatically creates all keywords that are called for by
2881@code{&key} argument specifiers, and discourages the use of keywords
2882as data unrelated to keyword arguments, so the related function
2883@code{defkeyword} (to create self-quoting keyword symbols) is not
2884provided.
4009494e 2885
1d5b82ef 2886@node Numbers
4009494e
GM
2887@chapter Numbers
2888
2889@noindent
2890This section defines a few simple Common Lisp operations on numbers
c65b407b 2891that were left out of Emacs Lisp.
4009494e
GM
2892
2893@menu
7fbf8f7b 2894* Predicates on Numbers:: @code{cl-plusp}, @code{cl-oddp}, etc.
c65b407b 2895* Numerical Functions:: @code{cl-floor}, @code{cl-ceiling}, etc.
39a58b5b 2896* Random Numbers:: @code{cl-random}, @code{cl-make-random-state}.
c65b407b 2897* Implementation Parameters:: @code{cl-most-positive-float}, etc.
4009494e
GM
2898@end menu
2899
1d5b82ef 2900@node Predicates on Numbers
4009494e
GM
2901@section Predicates on Numbers
2902
2903@noindent
2904These functions return @code{t} if the specified condition is
2905true of the numerical argument, or @code{nil} otherwise.
2906
39a58b5b 2907@defun cl-plusp number
4009494e
GM
2908This predicate tests whether @var{number} is positive. It is an
2909error if the argument is not a number.
2910@end defun
2911
39a58b5b 2912@defun cl-minusp number
4009494e
GM
2913This predicate tests whether @var{number} is negative. It is an
2914error if the argument is not a number.
2915@end defun
2916
39a58b5b 2917@defun cl-oddp integer
4009494e
GM
2918This predicate tests whether @var{integer} is odd. It is an
2919error if the argument is not an integer.
2920@end defun
2921
39a58b5b 2922@defun cl-evenp integer
4009494e
GM
2923This predicate tests whether @var{integer} is even. It is an
2924error if the argument is not an integer.
2925@end defun
2926
7fbf8f7b 2927@ignore
39a58b5b 2928@defun cl-floatp-safe object
4009494e
GM
2929This predicate tests whether @var{object} is a floating-point
2930number. On systems that support floating-point, this is equivalent
2931to @code{floatp}. On other systems, this always returns @code{nil}.
2932@end defun
7fbf8f7b 2933@end ignore
4009494e 2934
1d5b82ef 2935@node Numerical Functions
4009494e
GM
2936@section Numerical Functions
2937
2938@noindent
2939These functions perform various arithmetic operations on numbers.
2940
39a58b5b 2941@defun cl-gcd &rest integers
4009494e
GM
2942This function returns the Greatest Common Divisor of the arguments.
2943For one argument, it returns the absolute value of that argument.
2944For zero arguments, it returns zero.
2945@end defun
2946
39a58b5b 2947@defun cl-lcm &rest integers
4009494e
GM
2948This function returns the Least Common Multiple of the arguments.
2949For one argument, it returns the absolute value of that argument.
2950For zero arguments, it returns one.
2951@end defun
2952
39a58b5b 2953@defun cl-isqrt integer
4009494e
GM
2954This function computes the ``integer square root'' of its integer
2955argument, i.e., the greatest integer less than or equal to the true
2956square root of the argument.
2957@end defun
2958
39a58b5b
GM
2959@defun cl-floor number &optional divisor
2960With one argument, @code{cl-floor} returns a list of two numbers:
4009494e
GM
2961The argument rounded down (toward minus infinity) to an integer,
2962and the ``remainder'' which would have to be added back to the
2963first return value to yield the argument again. If the argument
2964is an integer @var{x}, the result is always the list @code{(@var{x} 0)}.
2965If the argument is a floating-point number, the first
2966result is a Lisp integer and the second is a Lisp float between
29670 (inclusive) and 1 (exclusive).
2968
39a58b5b 2969With two arguments, @code{cl-floor} divides @var{number} by
4009494e
GM
2970@var{divisor}, and returns the floor of the quotient and the
2971corresponding remainder as a list of two numbers. If
39a58b5b 2972@code{(cl-floor @var{x} @var{y})} returns @code{(@var{q} @var{r})},
4009494e
GM
2973then @code{@var{q}*@var{y} + @var{r} = @var{x}}, with @var{r}
2974between 0 (inclusive) and @var{r} (exclusive). Also, note
39a58b5b
GM
2975that @code{(cl-floor @var{x})} is exactly equivalent to
2976@code{(cl-floor @var{x} 1)}.
4009494e
GM
2977
2978This function is entirely compatible with Common Lisp's @code{floor}
2979function, except that it returns the two results in a list since
2980Emacs Lisp does not support multiple-valued functions.
2981@end defun
2982
39a58b5b 2983@defun cl-ceiling number &optional divisor
4009494e
GM
2984This function implements the Common Lisp @code{ceiling} function,
2985which is analogous to @code{floor} except that it rounds the
2986argument or quotient of the arguments up toward plus infinity.
2987The remainder will be between 0 and minus @var{r}.
2988@end defun
2989
39a58b5b 2990@defun cl-truncate number &optional divisor
4009494e
GM
2991This function implements the Common Lisp @code{truncate} function,
2992which is analogous to @code{floor} except that it rounds the
2993argument or quotient of the arguments toward zero. Thus it is
39a58b5b
GM
2994equivalent to @code{cl-floor} if the argument or quotient is
2995positive, or to @code{cl-ceiling} otherwise. The remainder has
4009494e
GM
2996the same sign as @var{number}.
2997@end defun
2998
39a58b5b 2999@defun cl-round number &optional divisor
4009494e
GM
3000This function implements the Common Lisp @code{round} function,
3001which is analogous to @code{floor} except that it rounds the
3002argument or quotient of the arguments to the nearest integer.
3003In the case of a tie (the argument or quotient is exactly
3004halfway between two integers), it rounds to the even integer.
3005@end defun
3006
39a58b5b 3007@defun cl-mod number divisor
4009494e 3008This function returns the same value as the second return value
39a58b5b 3009of @code{cl-floor}.
4009494e
GM
3010@end defun
3011
39a58b5b 3012@defun cl-rem number divisor
4009494e 3013This function returns the same value as the second return value
39a58b5b 3014of @code{cl-truncate}.
4009494e
GM
3015@end defun
3016
1d5b82ef 3017@node Random Numbers
4009494e
GM
3018@section Random Numbers
3019
3020@noindent
3021This package also provides an implementation of the Common Lisp
3022random number generator. It uses its own additive-congruential
3023algorithm, which is much more likely to give statistically clean
c65b407b 3024@c FIXME? Still true?
4009494e
GM
3025random numbers than the simple generators supplied by many
3026operating systems.
3027
39a58b5b 3028@defun cl-random number &optional state
4009494e
GM
3029This function returns a random nonnegative number less than
3030@var{number}, and of the same type (either integer or floating-point).
3031The @var{state} argument should be a @code{random-state} object
c65b407b 3032that holds the state of the random number generator. The
4009494e 3033function modifies this state object as a side effect. If
92246540 3034@var{state} is omitted, it defaults to the internal variable
a05cb6e3 3035@code{cl--random-state}, which contains a pre-initialized
92246540
GM
3036default @code{random-state} object. (Since any number of programs in
3037the Emacs process may be accessing @code{cl--random-state} in
3038interleaved fashion, the sequence generated from this will be
3039irreproducible for all intents and purposes.)
4009494e
GM
3040@end defun
3041
39a58b5b 3042@defun cl-make-random-state &optional state
4009494e
GM
3043This function creates or copies a @code{random-state} object.
3044If @var{state} is omitted or @code{nil}, it returns a new copy of
39a58b5b
GM
3045@code{cl--random-state}. This is a copy in the sense that future
3046sequences of calls to @code{(cl-random @var{n})} and
3047@code{(cl-random @var{n} @var{s})} (where @var{s} is the new
4009494e
GM
3048random-state object) will return identical sequences of random
3049numbers.
3050
3051If @var{state} is a @code{random-state} object, this function
3052returns a copy of that object. If @var{state} is @code{t}, this
3053function returns a new @code{random-state} object seeded from the
3054date and time. As an extension to Common Lisp, @var{state} may also
3055be an integer in which case the new object is seeded from that
3056integer; each different integer seed will result in a completely
3057different sequence of random numbers.
3058
3059It is valid to print a @code{random-state} object to a buffer or
3060file and later read it back with @code{read}. If a program wishes
3061to use a sequence of pseudo-random numbers which can be reproduced
39a58b5b 3062later for debugging, it can call @code{(cl-make-random-state t)} to
4009494e
GM
3063get a new sequence, then print this sequence to a file. When the
3064program is later rerun, it can read the original run's random-state
3065from the file.
3066@end defun
3067
39a58b5b 3068@defun cl-random-state-p object
4009494e
GM
3069This predicate returns @code{t} if @var{object} is a
3070@code{random-state} object, or @code{nil} otherwise.
3071@end defun
3072
1d5b82ef 3073@node Implementation Parameters
4009494e
GM
3074@section Implementation Parameters
3075
3076@noindent
c65b407b
GM
3077This package defines several useful constants having to do with
3078floating-point numbers.
4009494e 3079
c65b407b 3080It determines their values by exercising the computer's
4009494e
GM
3081floating-point arithmetic in various ways. Because this operation
3082might be slow, the code for initializing them is kept in a separate
3083function that must be called before the parameters can be used.
3084
3085@defun cl-float-limits
3086This function makes sure that the Common Lisp floating-point parameters
39a58b5b 3087like @code{cl-most-positive-float} have been initialized. Until it is
c65b407b
GM
3088called, these parameters will be @code{nil}.
3089@c If this version of Emacs does not support floats, the parameters will
3090@c remain @code{nil}.
3091If the parameters have already been initialized, the function returns
4009494e
GM
3092immediately.
3093
c65b407b 3094The algorithm makes assumptions that will be valid for almost all
4009494e
GM
3095machines, but will fail if the machine's arithmetic is extremely
3096unusual, e.g., decimal.
3097@end defun
3098
3099Since true Common Lisp supports up to four different floating-point
3100precisions, it has families of constants like
3101@code{most-positive-single-float}, @code{most-positive-double-float},
3102@code{most-positive-long-float}, and so on. Emacs has only one
3103floating-point precision, so this package omits the precision word
3104from the constants' names.
3105
39a58b5b 3106@defvar cl-most-positive-float
4009494e
GM
3107This constant equals the largest value a Lisp float can hold.
3108For those systems whose arithmetic supports infinities, this is
3109the largest @emph{finite} value. For IEEE machines, the value
3110is approximately @code{1.79e+308}.
3111@end defvar
3112
39a58b5b 3113@defvar cl-most-negative-float
c65b407b 3114This constant equals the most negative value a Lisp float can hold.
39a58b5b 3115(It is assumed to be equal to @code{(- cl-most-positive-float)}.)
4009494e
GM
3116@end defvar
3117
39a58b5b 3118@defvar cl-least-positive-float
4009494e
GM
3119This constant equals the smallest Lisp float value greater than zero.
3120For IEEE machines, it is about @code{4.94e-324} if denormals are
3121supported or @code{2.22e-308} if not.
3122@end defvar
3123
39a58b5b 3124@defvar cl-least-positive-normalized-float
4009494e
GM
3125This constant equals the smallest @emph{normalized} Lisp float greater
3126than zero, i.e., the smallest value for which IEEE denormalization
3127will not result in a loss of precision. For IEEE machines, this
3128value is about @code{2.22e-308}. For machines that do not support
3129the concept of denormalization and gradual underflow, this constant
39a58b5b 3130will always equal @code{cl-least-positive-float}.
4009494e
GM
3131@end defvar
3132
39a58b5b
GM
3133@defvar cl-least-negative-float
3134This constant is the negative counterpart of @code{cl-least-positive-float}.
4009494e
GM
3135@end defvar
3136
39a58b5b 3137@defvar cl-least-negative-normalized-float
4009494e 3138This constant is the negative counterpart of
39a58b5b 3139@code{cl-least-positive-normalized-float}.
4009494e
GM
3140@end defvar
3141
39a58b5b 3142@defvar cl-float-epsilon
4009494e
GM
3143This constant is the smallest positive Lisp float that can be added
3144to 1.0 to produce a distinct value. Adding a smaller number to 1.0
3145will yield 1.0 again due to roundoff. For IEEE machines, epsilon
3146is about @code{2.22e-16}.
3147@end defvar
3148
39a58b5b 3149@defvar cl-float-negative-epsilon
4009494e
GM
3150This is the smallest positive value that can be subtracted from
31511.0 to produce a distinct value. For IEEE machines, it is about
3152@code{1.11e-16}.
3153@end defvar
3154
1d5b82ef 3155@node Sequences
4009494e
GM
3156@chapter Sequences
3157
3158@noindent
3159Common Lisp defines a number of functions that operate on
3160@dfn{sequences}, which are either lists, strings, or vectors.
3161Emacs Lisp includes a few of these, notably @code{elt} and
3162@code{length}; this package defines most of the rest.
3163
3164@menu
8d6510b9 3165* Sequence Basics:: Arguments shared by all sequence functions.
df43dd53 3166* Mapping over Sequences:: @code{cl-mapcar}, @code{cl-map}, @code{cl-maplist}, etc.
39a58b5b 3167* Sequence Functions:: @code{cl-subseq}, @code{cl-remove}, @code{cl-substitute}, etc.
df43dd53 3168* Searching Sequences:: @code{cl-find}, @code{cl-count}, @code{cl-search}, etc.
39a58b5b 3169* Sorting Sequences:: @code{cl-sort}, @code{cl-stable-sort}, @code{cl-merge}.
4009494e
GM
3170@end menu
3171
1d5b82ef 3172@node Sequence Basics
4009494e
GM
3173@section Sequence Basics
3174
3175@noindent
3176Many of the sequence functions take keyword arguments; @pxref{Argument
3177Lists}. All keyword arguments are optional and, if specified,
3178may appear in any order.
3179
3180The @code{:key} argument should be passed either @code{nil}, or a
3181function of one argument. This key function is used as a filter
3182through which the elements of the sequence are seen; for example,
685b0026 3183@code{(cl-find x y :key 'car)} is similar to @code{(cl-assoc x y)}.
df43dd53 3184It searches for an element of the list whose @sc{car} equals
4009494e
GM
3185@code{x}, rather than for an element which equals @code{x} itself.
3186If @code{:key} is omitted or @code{nil}, the filter is effectively
3187the identity function.
3188
3189The @code{:test} and @code{:test-not} arguments should be either
3190@code{nil}, or functions of two arguments. The test function is
3191used to compare two sequence elements, or to compare a search value
3192with sequence elements. (The two values are passed to the test
3193function in the same order as the original sequence function
3194arguments from which they are derived, or, if they both come from
3195the same sequence, in the same order as they appear in that sequence.)
3196The @code{:test} argument specifies a function which must return
3197true (non-@code{nil}) to indicate a match; instead, you may use
3198@code{:test-not} to give a function which returns @emph{false} to
0a3333b5 3199indicate a match. The default test function is @code{eql}.
4009494e 3200
685b0026 3201Many functions that take @var{item} and @code{:test} or @code{:test-not}
4009494e
GM
3202arguments also come in @code{-if} and @code{-if-not} varieties,
3203where a @var{predicate} function is passed instead of @var{item},
3204and sequence elements match if the predicate returns true on them
3205(or false in the case of @code{-if-not}). For example:
3206
3207@example
39a58b5b 3208(cl-remove 0 seq :test '=) @equiv{} (cl-remove-if 'zerop seq)
4009494e
GM
3209@end example
3210
3211@noindent
3212to remove all zeros from sequence @code{seq}.
3213
3214Some operations can work on a subsequence of the argument sequence;
685b0026 3215these function take @code{:start} and @code{:end} arguments, which
4009494e
GM
3216default to zero and the length of the sequence, respectively.
3217Only elements between @var{start} (inclusive) and @var{end}
3218(exclusive) are affected by the operation. The @var{end} argument
3219may be passed @code{nil} to signify the length of the sequence;
3220otherwise, both @var{start} and @var{end} must be integers, with
3221@code{0 <= @var{start} <= @var{end} <= (length @var{seq})}.
3222If the function takes two sequence arguments, the limits are
3223defined by keywords @code{:start1} and @code{:end1} for the first,
3224and @code{:start2} and @code{:end2} for the second.
3225
3226A few functions accept a @code{:from-end} argument, which, if
3227non-@code{nil}, causes the operation to go from right-to-left
3228through the sequence instead of left-to-right, and a @code{:count}
3229argument, which specifies an integer maximum number of elements
3230to be removed or otherwise processed.
3231
3232The sequence functions make no guarantees about the order in
3233which the @code{:test}, @code{:test-not}, and @code{:key} functions
3234are called on various elements. Therefore, it is a bad idea to depend
3235on side effects of these functions. For example, @code{:from-end}
3236may cause the sequence to be scanned actually in reverse, or it may
3237be scanned forwards but computing a result ``as if'' it were scanned
39a58b5b 3238backwards. (Some functions, like @code{cl-mapcar} and @code{cl-every},
4009494e
GM
3239@emph{do} specify exactly the order in which the function is called
3240so side effects are perfectly acceptable in those cases.)
3241
3242Strings may contain ``text properties'' as well
3243as character data. Except as noted, it is undefined whether or
3244not text properties are preserved by sequence functions. For
39a58b5b 3245example, @code{(cl-remove ?A @var{str})} may or may not preserve
4009494e
GM
3246the properties of the characters copied from @var{str} into the
3247result.
3248
1d5b82ef 3249@node Mapping over Sequences
4009494e
GM
3250@section Mapping over Sequences
3251
3252@noindent
3253These functions ``map'' the function you specify over the elements
3254of lists or arrays. They are all variations on the theme of the
3255built-in function @code{mapcar}.
3256
39a58b5b 3257@defun cl-mapcar function seq &rest more-seqs
4009494e
GM
3258This function calls @var{function} on successive parallel sets of
3259elements from its argument sequences. Given a single @var{seq}
3260argument it is equivalent to @code{mapcar}; given @var{n} sequences,
3261it calls the function with the first elements of each of the sequences
3262as the @var{n} arguments to yield the first element of the result
3263list, then with the second elements, and so on. The mapping stops as
3264soon as the shortest sequence runs out. The argument sequences may
3265be any mixture of lists, strings, and vectors; the return sequence
3266is always a list.
3267
3268Common Lisp's @code{mapcar} accepts multiple arguments but works
3269only on lists; Emacs Lisp's @code{mapcar} accepts a single sequence
39a58b5b 3270argument. This package's @code{cl-mapcar} works as a compatible
4009494e
GM
3271superset of both.
3272@end defun
3273
39a58b5b 3274@defun cl-map result-type function seq &rest more-seqs
4009494e 3275This function maps @var{function} over the argument sequences,
39a58b5b 3276just like @code{cl-mapcar}, but it returns a sequence of type
4009494e
GM
3277@var{result-type} rather than a list. @var{result-type} must
3278be one of the following symbols: @code{vector}, @code{string},
3279@code{list} (in which case the effect is the same as for
a05cb6e3 3280@code{cl-mapcar}), or @code{nil} (in which case the results are
39a58b5b 3281thrown away and @code{cl-map} returns @code{nil}).
4009494e
GM
3282@end defun
3283
39a58b5b 3284@defun cl-maplist function list &rest more-lists
4009494e 3285This function calls @var{function} on each of its argument lists,
df43dd53 3286then on the @sc{cdr}s of those lists, and so on, until the
4009494e 3287shortest list runs out. The results are returned in the form
39a58b5b 3288of a list. Thus, @code{cl-maplist} is like @code{cl-mapcar} except
4009494e 3289that it passes in the list pointers themselves rather than the
df43dd53 3290@sc{car}s of the advancing pointers.
4009494e
GM
3291@end defun
3292
b695beda 3293@defun cl-mapc function seq &rest more-seqs
39a58b5b 3294This function is like @code{cl-mapcar}, except that the values returned
4009494e 3295by @var{function} are ignored and thrown away rather than being
b695beda 3296collected into a list. The return value of @code{cl-mapc} is @var{seq},
4009494e 3297the first sequence. This function is more general than the Emacs
f43a5263 3298primitive @code{mapc}. (Note that this function is called
86a7968c 3299@code{cl-mapc} even in @file{cl.el}, rather than @code{mapc*} as you
f43a5263
GM
3300might expect.)
3301@c http://debbugs.gnu.org/6575
4009494e
GM
3302@end defun
3303
39a58b5b
GM
3304@defun cl-mapl function list &rest more-lists
3305This function is like @code{cl-maplist}, except that it throws away
4009494e
GM
3306the values returned by @var{function}.
3307@end defun
3308
39a58b5b
GM
3309@defun cl-mapcan function seq &rest more-seqs
3310This function is like @code{cl-mapcar}, except that it concatenates
4009494e
GM
3311the return values (which must be lists) using @code{nconc},
3312rather than simply collecting them into a list.
3313@end defun
3314
39a58b5b
GM
3315@defun cl-mapcon function list &rest more-lists
3316This function is like @code{cl-maplist}, except that it concatenates
4009494e
GM
3317the return values using @code{nconc}.
3318@end defun
3319
39a58b5b 3320@defun cl-some predicate seq &rest more-seqs
4009494e
GM
3321This function calls @var{predicate} on each element of @var{seq}
3322in turn; if @var{predicate} returns a non-@code{nil} value,
685b0026 3323@code{cl-some} returns that value, otherwise it returns @code{nil}.
4009494e
GM
3324Given several sequence arguments, it steps through the sequences
3325in parallel until the shortest one runs out, just as in
39a58b5b 3326@code{cl-mapcar}. You can rely on the left-to-right order in which
4009494e
GM
3327the elements are visited, and on the fact that mapping stops
3328immediately as soon as @var{predicate} returns non-@code{nil}.
3329@end defun
3330
39a58b5b 3331@defun cl-every predicate seq &rest more-seqs
4009494e
GM
3332This function calls @var{predicate} on each element of the sequence(s)
3333in turn; it returns @code{nil} as soon as @var{predicate} returns
3334@code{nil} for any element, or @code{t} if the predicate was true
3335for all elements.
3336@end defun
3337
39a58b5b 3338@defun cl-notany predicate seq &rest more-seqs
4009494e
GM
3339This function calls @var{predicate} on each element of the sequence(s)
3340in turn; it returns @code{nil} as soon as @var{predicate} returns
3341a non-@code{nil} value for any element, or @code{t} if the predicate
3342was @code{nil} for all elements.
3343@end defun
3344
39a58b5b 3345@defun cl-notevery predicate seq &rest more-seqs
4009494e
GM
3346This function calls @var{predicate} on each element of the sequence(s)
3347in turn; it returns a non-@code{nil} value as soon as @var{predicate}
3348returns @code{nil} for any element, or @code{t} if the predicate was
3349true for all elements.
3350@end defun
3351
39a58b5b 3352@defun cl-reduce function seq @t{&key :from-end :start :end :initial-value :key}
4009494e
GM
3353This function combines the elements of @var{seq} using an associative
3354binary operation. Suppose @var{function} is @code{*} and @var{seq} is
3355the list @code{(2 3 4 5)}. The first two elements of the list are
3356combined with @code{(* 2 3) = 6}; this is combined with the next
3357element, @code{(* 6 4) = 24}, and that is combined with the final
3358element: @code{(* 24 5) = 120}. Note that the @code{*} function happens
3359to be self-reducing, so that @code{(* 2 3 4 5)} has the same effect as
39a58b5b 3360an explicit call to @code{cl-reduce}.
4009494e
GM
3361
3362If @code{:from-end} is true, the reduction is right-associative instead
3363of left-associative:
3364
3365@example
39a58b5b
GM
3366(cl-reduce '- '(1 2 3 4))
3367 @equiv{} (- (- (- 1 2) 3) 4) @result{} -8
3368(cl-reduce '- '(1 2 3 4) :from-end t)
3369 @equiv{} (- 1 (- 2 (- 3 4))) @result{} -2
4009494e
GM
3370@end example
3371
685b0026 3372If @code{:key} is specified, it is a function of one argument, which
4009494e
GM
3373is called on each of the sequence elements in turn.
3374
3375If @code{:initial-value} is specified, it is effectively added to the
3376front (or rear in the case of @code{:from-end}) of the sequence.
3377The @code{:key} function is @emph{not} applied to the initial value.
3378
3379If the sequence, including the initial value, has exactly one element
3380then that element is returned without ever calling @var{function}.
3381If the sequence is empty (and there is no initial value), then
3382@var{function} is called with no arguments to obtain the return value.
3383@end defun
3384
3385All of these mapping operations can be expressed conveniently in
39a58b5b 3386terms of the @code{cl-loop} macro. In compiled code, @code{cl-loop} will
4009494e
GM
3387be faster since it generates the loop as in-line code with no
3388function calls.
3389
1d5b82ef 3390@node Sequence Functions
4009494e
GM
3391@section Sequence Functions
3392
3393@noindent
3394This section describes a number of Common Lisp functions for
3395operating on sequences.
3396
39a58b5b 3397@defun cl-subseq sequence start &optional end
4009494e
GM
3398This function returns a given subsequence of the argument
3399@var{sequence}, which may be a list, string, or vector.
3400The indices @var{start} and @var{end} must be in range, and
3401@var{start} must be no greater than @var{end}. If @var{end}
3402is omitted, it defaults to the length of the sequence. The
3403return value is always a copy; it does not share structure
3404with @var{sequence}.
3405
3406As an extension to Common Lisp, @var{start} and/or @var{end}
3407may be negative, in which case they represent a distance back
3408from the end of the sequence. This is for compatibility with
39a58b5b 3409Emacs's @code{substring} function. Note that @code{cl-subseq} is
4009494e
GM
3410the @emph{only} sequence function that allows negative
3411@var{start} and @var{end}.
3412
39a58b5b 3413You can use @code{setf} on a @code{cl-subseq} form to replace a
4009494e 3414specified range of elements with elements from another sequence.
39a58b5b 3415The replacement is done as if by @code{cl-replace}, described below.
4009494e
GM
3416@end defun
3417
39a58b5b 3418@defun cl-concatenate result-type &rest seqs
4009494e
GM
3419This function concatenates the argument sequences together to
3420form a result sequence of type @var{result-type}, one of the
3421symbols @code{vector}, @code{string}, or @code{list}. The
3422arguments are always copied, even in cases such as
39a58b5b 3423@code{(cl-concatenate 'list '(1 2 3))} where the result is
4009494e
GM
3424identical to an argument.
3425@end defun
3426
39a58b5b 3427@defun cl-fill seq item @t{&key :start :end}
4009494e
GM
3428This function fills the elements of the sequence (or the specified
3429part of the sequence) with the value @var{item}.
3430@end defun
3431
39a58b5b 3432@defun cl-replace seq1 seq2 @t{&key :start1 :end1 :start2 :end2}
4009494e
GM
3433This function copies part of @var{seq2} into part of @var{seq1}.
3434The sequence @var{seq1} is not stretched or resized; the amount
3435of data copied is simply the shorter of the source and destination
3436(sub)sequences. The function returns @var{seq1}.
3437
3438If @var{seq1} and @var{seq2} are @code{eq}, then the replacement
3439will work correctly even if the regions indicated by the start
3440and end arguments overlap. However, if @var{seq1} and @var{seq2}
685b0026 3441are lists that share storage but are not @code{eq}, and the
4009494e
GM
3442start and end arguments specify overlapping regions, the effect
3443is undefined.
3444@end defun
3445
39a58b5b 3446@defun cl-remove item seq @t{&key :test :test-not :key :count :start :end :from-end}
4009494e
GM
3447This returns a copy of @var{seq} with all elements matching
3448@var{item} removed. The result may share storage with or be
3449@code{eq} to @var{seq} in some circumstances, but the original
3450@var{seq} will not be modified. The @code{:test}, @code{:test-not},
3451and @code{:key} arguments define the matching test that is used;
3452by default, elements @code{eql} to @var{item} are removed. The
3453@code{:count} argument specifies the maximum number of matching
3454elements that can be removed (only the leftmost @var{count} matches
3455are removed). The @code{:start} and @code{:end} arguments specify
3456a region in @var{seq} in which elements will be removed; elements
3457outside that region are not matched or removed. The @code{:from-end}
3458argument, if true, says that elements should be deleted from the
3459end of the sequence rather than the beginning (this matters only
3460if @var{count} was also specified).
3461@end defun
3462
39a58b5b 3463@defun cl-delete item seq @t{&key :test :test-not :key :count :start :end :from-end}
685b0026 3464This deletes all elements of @var{seq} that match @var{item}.
4009494e 3465It is a destructive operation. Since Emacs Lisp does not support
39a58b5b
GM
3466stretchable strings or vectors, this is the same as @code{cl-remove}
3467for those sequence types. On lists, @code{cl-remove} will copy the
4009494e 3468list if necessary to preserve the original list, whereas
39a58b5b 3469@code{cl-delete} will splice out parts of the argument list.
4009494e
GM
3470Compare @code{append} and @code{nconc}, which are analogous
3471non-destructive and destructive list operations in Emacs Lisp.
3472@end defun
3473
39a58b5b
GM
3474@findex cl-remove-if
3475@findex cl-remove-if-not
3476@findex cl-delete-if
3477@findex cl-delete-if-not
3478The predicate-oriented functions @code{cl-remove-if}, @code{cl-remove-if-not},
3479@code{cl-delete-if}, and @code{cl-delete-if-not} are defined similarly.
4009494e 3480
39a58b5b 3481@defun cl-remove-duplicates seq @t{&key :test :test-not :key :start :end :from-end}
4009494e
GM
3482This function returns a copy of @var{seq} with duplicate elements
3483removed. Specifically, if two elements from the sequence match
3484according to the @code{:test}, @code{:test-not}, and @code{:key}
3485arguments, only the rightmost one is retained. If @code{:from-end}
3486is true, the leftmost one is retained instead. If @code{:start} or
3487@code{:end} is specified, only elements within that subsequence are
3488examined or removed.
3489@end defun
3490
39a58b5b 3491@defun cl-delete-duplicates seq @t{&key :test :test-not :key :start :end :from-end}
4009494e 3492This function deletes duplicate elements from @var{seq}. It is
39a58b5b 3493a destructive version of @code{cl-remove-duplicates}.
4009494e
GM
3494@end defun
3495
39a58b5b 3496@defun cl-substitute new old seq @t{&key :test :test-not :key :count :start :end :from-end}
4009494e
GM
3497This function returns a copy of @var{seq}, with all elements
3498matching @var{old} replaced with @var{new}. The @code{:count},
3499@code{:start}, @code{:end}, and @code{:from-end} arguments may be
3500used to limit the number of substitutions made.
3501@end defun
3502
39a58b5b
GM
3503@defun cl-nsubstitute new old seq @t{&key :test :test-not :key :count :start :end :from-end}
3504This is a destructive version of @code{cl-substitute}; it performs
4009494e
GM
3505the substitution using @code{setcar} or @code{aset} rather than
3506by returning a changed copy of the sequence.
3507@end defun
3508
39a58b5b
GM
3509@findex cl-substitute-if
3510@findex cl-substitute-if-not
3511@findex cl-nsubstitute-if
3512@findex cl-nsubstitute-if-not
a05cb6e3
GM
3513The functions @code{cl-substitute-if}, @code{cl-substitute-if-not},
3514@code{cl-nsubstitute-if}, and @code{cl-nsubstitute-if-not} are defined
3515similarly. For these, a @var{predicate} is given in place of the
3516@var{old} argument.
4009494e 3517
1d5b82ef 3518@node Searching Sequences
4009494e
GM
3519@section Searching Sequences
3520
3521@noindent
3522These functions search for elements or subsequences in a sequence.
39a58b5b 3523(See also @code{cl-member} and @code{cl-assoc}; @pxref{Lists}.)
4009494e 3524
39a58b5b 3525@defun cl-find item seq @t{&key :test :test-not :key :start :end :from-end}
4009494e
GM
3526This function searches @var{seq} for an element matching @var{item}.
3527If it finds a match, it returns the matching element. Otherwise,
3528it returns @code{nil}. It returns the leftmost match, unless
3529@code{:from-end} is true, in which case it returns the rightmost
3530match. The @code{:start} and @code{:end} arguments may be used to
3531limit the range of elements that are searched.
3532@end defun
3533
39a58b5b
GM
3534@defun cl-position item seq @t{&key :test :test-not :key :start :end :from-end}
3535This function is like @code{cl-find}, except that it returns the
4009494e
GM
3536integer position in the sequence of the matching item rather than
3537the item itself. The position is relative to the start of the
3538sequence as a whole, even if @code{:start} is non-zero. The function
3539returns @code{nil} if no matching element was found.
3540@end defun
3541
39a58b5b 3542@defun cl-count item seq @t{&key :test :test-not :key :start :end}
4009494e
GM
3543This function returns the number of elements of @var{seq} which
3544match @var{item}. The result is always a nonnegative integer.
3545@end defun
3546
39a58b5b
GM
3547@findex cl-find-if
3548@findex cl-find-if-not
3549@findex cl-position-if
3550@findex cl-position-if-not
3551@findex cl-count-if
3552@findex cl-count-if-not
3553The @code{cl-find-if}, @code{cl-find-if-not}, @code{cl-position-if},
3554@code{cl-position-if-not}, @code{cl-count-if}, and @code{cl-count-if-not}
4009494e
GM
3555functions are defined similarly.
3556
39a58b5b 3557@defun cl-mismatch seq1 seq2 @t{&key :test :test-not :key :start1 :end1 :start2 :end2 :from-end}
4009494e
GM
3558This function compares the specified parts of @var{seq1} and
3559@var{seq2}. If they are the same length and the corresponding
3560elements match (according to @code{:test}, @code{:test-not},
3561and @code{:key}), the function returns @code{nil}. If there is
3562a mismatch, the function returns the index (relative to @var{seq1})
3563of the first mismatching element. This will be the leftmost pair of
685b0026 3564elements that do not match, or the position at which the shorter of
4009494e
GM
3565the two otherwise-matching sequences runs out.
3566
3567If @code{:from-end} is true, then the elements are compared from right
3568to left starting at @code{(1- @var{end1})} and @code{(1- @var{end2})}.
3569If the sequences differ, then one plus the index of the rightmost
3570difference (relative to @var{seq1}) is returned.
3571
39a58b5b 3572An interesting example is @code{(cl-mismatch str1 str2 :key 'upcase)},
4009494e
GM
3573which compares two strings case-insensitively.
3574@end defun
3575
39a58b5b 3576@defun cl-search seq1 seq2 @t{&key :test :test-not :key :from-end :start1 :end1 :start2 :end2}
4009494e
GM
3577This function searches @var{seq2} for a subsequence that matches
3578@var{seq1} (or part of it specified by @code{:start1} and
685b0026 3579@code{:end1}). Only matches that fall entirely within the region
4009494e
GM
3580defined by @code{:start2} and @code{:end2} will be considered.
3581The return value is the index of the leftmost element of the
3582leftmost match, relative to the start of @var{seq2}, or @code{nil}
3583if no matches were found. If @code{:from-end} is true, the
3584function finds the @emph{rightmost} matching subsequence.
3585@end defun
3586
1d5b82ef 3587@node Sorting Sequences
4009494e
GM
3588@section Sorting Sequences
3589
685b0026 3590@defun cl-sort seq predicate @t{&key :key}
4009494e
GM
3591This function sorts @var{seq} into increasing order as determined
3592by using @var{predicate} to compare pairs of elements. @var{predicate}
3593should return true (non-@code{nil}) if and only if its first argument
3594is less than (not equal to) its second argument. For example,
3595@code{<} and @code{string-lessp} are suitable predicate functions
3596for sorting numbers and strings, respectively; @code{>} would sort
3597numbers into decreasing rather than increasing order.
3598
44e97401 3599This function differs from Emacs's built-in @code{sort} in that it
4009494e 3600can operate on any type of sequence, not just lists. Also, it
685b0026 3601accepts a @code{:key} argument, which is used to preprocess data
4009494e
GM
3602fed to the @var{predicate} function. For example,
3603
3604@example
39a58b5b 3605(setq data (cl-sort data 'string-lessp :key 'downcase))
4009494e
GM
3606@end example
3607
3608@noindent
3609sorts @var{data}, a sequence of strings, into increasing alphabetical
3610order without regard to case. A @code{:key} function of @code{car}
3611would be useful for sorting association lists. It should only be a
685b0026 3612simple accessor though, since it's used heavily in the current
4009494e
GM
3613implementation.
3614
39a58b5b 3615The @code{cl-sort} function is destructive; it sorts lists by actually
df43dd53 3616rearranging the @sc{cdr} pointers in suitable fashion.
4009494e
GM
3617@end defun
3618
39a58b5b 3619@defun cl-stable-sort seq predicate @t{&key :key}
4009494e
GM
3620This function sorts @var{seq} @dfn{stably}, meaning two elements
3621which are equal in terms of @var{predicate} are guaranteed not to
3622be rearranged out of their original order by the sort.
3623
39a58b5b 3624In practice, @code{cl-sort} and @code{cl-stable-sort} are equivalent
4009494e
GM
3625in Emacs Lisp because the underlying @code{sort} function is
3626stable by default. However, this package reserves the right to
39a58b5b 3627use non-stable methods for @code{cl-sort} in the future.
4009494e
GM
3628@end defun
3629
39a58b5b 3630@defun cl-merge type seq1 seq2 predicate @t{&key :key}
4009494e
GM
3631This function merges two sequences @var{seq1} and @var{seq2} by
3632interleaving their elements. The result sequence, of type @var{type}
39a58b5b 3633(in the sense of @code{cl-concatenate}), has length equal to the sum
4009494e
GM
3634of the lengths of the two input sequences. The sequences may be
3635modified destructively. Order of elements within @var{seq1} and
3636@var{seq2} is preserved in the interleaving; elements of the two
3637sequences are compared by @var{predicate} (in the sense of
3638@code{sort}) and the lesser element goes first in the result.
3639When elements are equal, those from @var{seq1} precede those from
3640@var{seq2} in the result. Thus, if @var{seq1} and @var{seq2} are
3641both sorted according to @var{predicate}, then the result will be
3642a merged sequence which is (stably) sorted according to
3643@var{predicate}.
3644@end defun
3645
1d5b82ef 3646@node Lists
4009494e
GM
3647@chapter Lists
3648
3649@noindent
3650The functions described here operate on lists.
3651
3652@menu
39a58b5b
GM
3653* List Functions:: @code{cl-caddr}, @code{cl-first}, @code{cl-list*}, etc.
3654* Substitution of Expressions:: @code{cl-subst}, @code{cl-sublis}, etc.
3655* Lists as Sets:: @code{cl-member}, @code{cl-adjoin}, @code{cl-union}, etc.
df43dd53 3656* Association Lists:: @code{cl-assoc}, @code{cl-acons}, @code{cl-pairlis}, etc.
4009494e
GM
3657@end menu
3658
1d5b82ef 3659@node List Functions
4009494e
GM
3660@section List Functions
3661
3662@noindent
3663This section describes a number of simple operations on lists,
3664i.e., chains of cons cells.
3665
39a58b5b 3666@defun cl-caddr x
4009494e 3667This function is equivalent to @code{(car (cdr (cdr @var{x})))}.
685b0026 3668Likewise, this package defines all 24 @code{c@var{xxx}r} functions
4009494e
GM
3669where @var{xxx} is up to four @samp{a}s and/or @samp{d}s.
3670All of these functions are @code{setf}-able, and calls to them
3671are expanded inline by the byte-compiler for maximum efficiency.
3672@end defun
3673
39a58b5b 3674@defun cl-first x
4009494e 3675This function is a synonym for @code{(car @var{x})}. Likewise,
39a58b5b
GM
3676the functions @code{cl-second}, @code{cl-third}, @dots{}, through
3677@code{cl-tenth} return the given element of the list @var{x}.
4009494e
GM
3678@end defun
3679
39a58b5b 3680@defun cl-rest x
4009494e
GM
3681This function is a synonym for @code{(cdr @var{x})}.
3682@end defun
3683
39a58b5b 3684@defun cl-endp x
4009494e
GM
3685Common Lisp defines this function to act like @code{null}, but
3686signaling an error if @code{x} is neither a @code{nil} nor a
39a58b5b 3687cons cell. This package simply defines @code{cl-endp} as a synonym
4009494e
GM
3688for @code{null}.
3689@end defun
3690
39a58b5b 3691@defun cl-list-length x
4009494e
GM
3692This function returns the length of list @var{x}, exactly like
3693@code{(length @var{x})}, except that if @var{x} is a circular
df43dd53 3694list (where the @sc{cdr}-chain forms a loop rather than terminating
4009494e 3695with @code{nil}), this function returns @code{nil}. (The regular
685b0026
GM
3696@code{length} function would get stuck if given a circular list.
3697See also the @code{safe-length} function.)
4009494e
GM
3698@end defun
3699
39a58b5b 3700@defun cl-list* arg &rest others
4009494e 3701This function constructs a list of its arguments. The final
df43dd53 3702argument becomes the @sc{cdr} of the last cell constructed.
39a58b5b 3703Thus, @code{(cl-list* @var{a} @var{b} @var{c})} is equivalent to
4009494e 3704@code{(cons @var{a} (cons @var{b} @var{c}))}, and
39a58b5b 3705@code{(cl-list* @var{a} @var{b} nil)} is equivalent to
4009494e 3706@code{(list @var{a} @var{b})}.
4009494e
GM
3707@end defun
3708
39a58b5b 3709@defun cl-ldiff list sublist
4009494e
GM
3710If @var{sublist} is a sublist of @var{list}, i.e., is @code{eq} to
3711one of the cons cells of @var{list}, then this function returns
3712a copy of the part of @var{list} up to but not including
39a58b5b 3713@var{sublist}. For example, @code{(cl-ldiff x (cddr x))} returns
4009494e
GM
3714the first two elements of the list @code{x}. The result is a
3715copy; the original @var{list} is not modified. If @var{sublist}
3716is not a sublist of @var{list}, a copy of the entire @var{list}
3717is returned.
3718@end defun
3719
39a58b5b 3720@defun cl-copy-list list
4009494e
GM
3721This function returns a copy of the list @var{list}. It copies
3722dotted lists like @code{(1 2 . 3)} correctly.
3723@end defun
3724
39a58b5b 3725@defun cl-tree-equal x y @t{&key :test :test-not :key}
4009494e 3726This function compares two trees of cons cells. If @var{x} and
df43dd53 3727@var{y} are both cons cells, their @sc{car}s and @sc{cdr}s are
4009494e
GM
3728compared recursively. If neither @var{x} nor @var{y} is a cons
3729cell, they are compared by @code{eql}, or according to the
3730specified test. The @code{:key} function, if specified, is
3731applied to the elements of both trees. @xref{Sequences}.
3732@end defun
3733
1d5b82ef 3734@node Substitution of Expressions
4009494e
GM
3735@section Substitution of Expressions
3736
3737@noindent
3738These functions substitute elements throughout a tree of cons
39a58b5b 3739cells. (@xref{Sequence Functions}, for the @code{cl-substitute}
4009494e
GM
3740function, which works on just the top-level elements of a list.)
3741
39a58b5b 3742@defun cl-subst new old tree @t{&key :test :test-not :key}
4009494e
GM
3743This function substitutes occurrences of @var{old} with @var{new}
3744in @var{tree}, a tree of cons cells. It returns a substituted
3745tree, which will be a copy except that it may share storage with
3746the argument @var{tree} in parts where no substitutions occurred.
3747The original @var{tree} is not modified. This function recurses
df43dd53 3748on, and compares against @var{old}, both @sc{car}s and @sc{cdr}s
4009494e
GM
3749of the component cons cells. If @var{old} is itself a cons cell,
3750then matching cells in the tree are substituted as usual without
3751recursively substituting in that cell. Comparisons with @var{old}
3752are done according to the specified test (@code{eql} by default).
3753The @code{:key} function is applied to the elements of the tree
3754but not to @var{old}.
3755@end defun
3756
39a58b5b
GM
3757@defun cl-nsubst new old tree @t{&key :test :test-not :key}
3758This function is like @code{cl-subst}, except that it works by
4009494e
GM
3759destructive modification (by @code{setcar} or @code{setcdr})
3760rather than copying.
3761@end defun
3762
39a58b5b
GM
3763@findex cl-subst-if
3764@findex cl-subst-if-not
3765@findex cl-nsubst-if
3766@findex cl-nsubst-if-not
3767The @code{cl-subst-if}, @code{cl-subst-if-not}, @code{cl-nsubst-if}, and
3768@code{cl-nsubst-if-not} functions are defined similarly.
4009494e 3769
39a58b5b
GM
3770@defun cl-sublis alist tree @t{&key :test :test-not :key}
3771This function is like @code{cl-subst}, except that it takes an
4009494e
GM
3772association list @var{alist} of @var{old}-@var{new} pairs.
3773Each element of the tree (after applying the @code{:key}
df43dd53 3774function, if any), is compared with the @sc{car}s of
4009494e 3775@var{alist}; if it matches, it is replaced by the corresponding
df43dd53 3776@sc{cdr}.
4009494e
GM
3777@end defun
3778
39a58b5b
GM
3779@defun cl-nsublis alist tree @t{&key :test :test-not :key}
3780This is a destructive version of @code{cl-sublis}.
4009494e
GM
3781@end defun
3782
1d5b82ef 3783@node Lists as Sets
4009494e
GM
3784@section Lists as Sets
3785
3786@noindent
685b0026 3787These functions perform operations on lists that represent sets
4009494e
GM
3788of elements.
3789
39a58b5b 3790@defun cl-member item list @t{&key :test :test-not :key}
4009494e 3791This function searches @var{list} for an element matching @var{item}.
df43dd53 3792If a match is found, it returns the cons cell whose @sc{car} was
4009494e
GM
3793the matching element. Otherwise, it returns @code{nil}. Elements
3794are compared by @code{eql} by default; you can use the @code{:test},
3795@code{:test-not}, and @code{:key} arguments to modify this behavior.
3796@xref{Sequences}.
3797
39a58b5b
GM
3798The standard Emacs lisp function @code{member} uses @code{equal} for
3799comparisons; it is equivalent to @code{(cl-member @var{item} @var{list}
685b0026
GM
3800:test 'equal)}. With no keyword arguments, @code{cl-member} is
3801equivalent to @code{memq}.
4009494e
GM
3802@end defun
3803
39a58b5b
GM
3804@findex cl-member-if
3805@findex cl-member-if-not
3806The @code{cl-member-if} and @code{cl-member-if-not} functions
685b0026 3807analogously search for elements that satisfy a given predicate.
4009494e 3808
39a58b5b 3809@defun cl-tailp sublist list
4009494e
GM
3810This function returns @code{t} if @var{sublist} is a sublist of
3811@var{list}, i.e., if @var{sublist} is @code{eql} to @var{list} or to
df43dd53 3812any of its @sc{cdr}s.
4009494e
GM
3813@end defun
3814
39a58b5b 3815@defun cl-adjoin item list @t{&key :test :test-not :key}
4009494e
GM
3816This function conses @var{item} onto the front of @var{list},
3817like @code{(cons @var{item} @var{list})}, but only if @var{item}
39a58b5b 3818is not already present on the list (as determined by @code{cl-member}).
4009494e
GM
3819If a @code{:key} argument is specified, it is applied to
3820@var{item} as well as to the elements of @var{list} during
3821the search, on the reasoning that @var{item} is ``about'' to
3822become part of the list.
3823@end defun
3824
39a58b5b 3825@defun cl-union list1 list2 @t{&key :test :test-not :key}
685b0026 3826This function combines two lists that represent sets of items,
4009494e 3827returning a list that represents the union of those two sets.
685b0026 3828The resulting list contains all items that appear in @var{list1}
4009494e 3829or @var{list2}, and no others. If an item appears in both
685b0026 3830@var{list1} and @var{list2} it is copied only once. If
4009494e
GM
3831an item is duplicated in @var{list1} or @var{list2}, it is
3832undefined whether or not that duplication will survive in the
3833result list. The order of elements in the result list is also
3834undefined.
3835@end defun
3836
39a58b5b
GM
3837@defun cl-nunion list1 list2 @t{&key :test :test-not :key}
3838This is a destructive version of @code{cl-union}; rather than copying,
4009494e
GM
3839it tries to reuse the storage of the argument lists if possible.
3840@end defun
3841
39a58b5b 3842@defun cl-intersection list1 list2 @t{&key :test :test-not :key}
4009494e
GM
3843This function computes the intersection of the sets represented
3844by @var{list1} and @var{list2}. It returns the list of items
685b0026 3845that appear in both @var{list1} and @var{list2}.
4009494e
GM
3846@end defun
3847
39a58b5b
GM
3848@defun cl-nintersection list1 list2 @t{&key :test :test-not :key}
3849This is a destructive version of @code{cl-intersection}. It
4009494e
GM
3850tries to reuse storage of @var{list1} rather than copying.
3851It does @emph{not} reuse the storage of @var{list2}.
3852@end defun
3853
39a58b5b 3854@defun cl-set-difference list1 list2 @t{&key :test :test-not :key}
4009494e
GM
3855This function computes the ``set difference'' of @var{list1}
3856and @var{list2}, i.e., the set of elements that appear in
3857@var{list1} but @emph{not} in @var{list2}.
3858@end defun
3859
39a58b5b
GM
3860@defun cl-nset-difference list1 list2 @t{&key :test :test-not :key}
3861This is a destructive @code{cl-set-difference}, which will try
4009494e
GM
3862to reuse @var{list1} if possible.
3863@end defun
3864
39a58b5b 3865@defun cl-set-exclusive-or list1 list2 @t{&key :test :test-not :key}
4009494e
GM
3866This function computes the ``set exclusive or'' of @var{list1}
3867and @var{list2}, i.e., the set of elements that appear in
3868exactly one of @var{list1} and @var{list2}.
3869@end defun
3870
39a58b5b
GM
3871@defun cl-nset-exclusive-or list1 list2 @t{&key :test :test-not :key}
3872This is a destructive @code{cl-set-exclusive-or}, which will try
4009494e
GM
3873to reuse @var{list1} and @var{list2} if possible.
3874@end defun
3875
39a58b5b 3876@defun cl-subsetp list1 list2 @t{&key :test :test-not :key}
4009494e
GM
3877This function checks whether @var{list1} represents a subset
3878of @var{list2}, i.e., whether every element of @var{list1}
3879also appears in @var{list2}.
3880@end defun
3881
1d5b82ef 3882@node Association Lists
4009494e
GM
3883@section Association Lists
3884
3885@noindent
3886An @dfn{association list} is a list representing a mapping from
3887one set of values to another; any list whose elements are cons
3888cells is an association list.
3889
39a58b5b 3890@defun cl-assoc item a-list @t{&key :test :test-not :key}
4009494e 3891This function searches the association list @var{a-list} for an
df43dd53 3892element whose @sc{car} matches (in the sense of @code{:test},
4009494e
GM
3893@code{:test-not}, and @code{:key}, or by comparison with @code{eql})
3894a given @var{item}. It returns the matching element, if any,
685b0026 3895otherwise @code{nil}. It ignores elements of @var{a-list} that
4009494e
GM
3896are not cons cells. (This corresponds to the behavior of
3897@code{assq} and @code{assoc} in Emacs Lisp; Common Lisp's
3898@code{assoc} ignores @code{nil}s but considers any other non-cons
3899elements of @var{a-list} to be an error.)
3900@end defun
3901
39a58b5b 3902@defun cl-rassoc item a-list @t{&key :test :test-not :key}
df43dd53 3903This function searches for an element whose @sc{cdr} matches
4009494e
GM
3904@var{item}. If @var{a-list} represents a mapping, this applies
3905the inverse of the mapping to @var{item}.
3906@end defun
3907
39a58b5b
GM
3908@findex cl-assoc-if
3909@findex cl-assoc-if-not
3910@findex cl-rassoc-if
3911@findex cl-rassoc-if-not
3912The @code{cl-assoc-if}, @code{cl-assoc-if-not}, @code{cl-rassoc-if},
3913and @code{cl-rassoc-if-not} functions are defined similarly.
4009494e
GM
3914
3915Two simple functions for constructing association lists are:
3916
39a58b5b 3917@defun cl-acons key value alist
4009494e
GM
3918This is equivalent to @code{(cons (cons @var{key} @var{value}) @var{alist})}.
3919@end defun
3920
39a58b5b
GM
3921@defun cl-pairlis keys values &optional alist
3922This is equivalent to @code{(nconc (cl-mapcar 'cons @var{keys} @var{values})
4009494e
GM
3923@var{alist})}.
3924@end defun
3925
1d5b82ef 3926@node Structures
4009494e
GM
3927@chapter Structures
3928
3929@noindent
3930The Common Lisp @dfn{structure} mechanism provides a general way
3931to define data types similar to C's @code{struct} types. A
3932structure is a Lisp object containing some number of @dfn{slots},
3933each of which can hold any Lisp data object. Functions are
3934provided for accessing and setting the slots, creating or copying
3935structure objects, and recognizing objects of a particular structure
3936type.
3937
3938In true Common Lisp, each structure type is a new type distinct
3939from all existing Lisp types. Since the underlying Emacs Lisp
3940system provides no way to create new distinct types, this package
3941implements structures as vectors (or lists upon request) with a
3942special ``tag'' symbol to identify them.
3943
e1117425 3944@defmac cl-defstruct name slots@dots{}
39a58b5b 3945The @code{cl-defstruct} form defines a new structure type called
4009494e
GM
3946@var{name}, with the specified @var{slots}. (The @var{slots}
3947may begin with a string which documents the structure type.)
3948In the simplest case, @var{name} and each of the @var{slots}
3949are symbols. For example,
3950
3951@example
39a58b5b 3952(cl-defstruct person name age sex)
4009494e
GM
3953@end example
3954
3955@noindent
685b0026 3956defines a struct type called @code{person} that contains three
4009494e
GM
3957slots. Given a @code{person} object @var{p}, you can access those
3958slots by calling @code{(person-name @var{p})}, @code{(person-age @var{p})},
3959and @code{(person-sex @var{p})}. You can also change these slots by
685b0026 3960using @code{setf} on any of these place forms, for example:
4009494e
GM
3961
3962@example
39a58b5b 3963(cl-incf (person-age birthday-boy))
4009494e
GM
3964@end example
3965
3966You can create a new @code{person} by calling @code{make-person},
3967which takes keyword arguments @code{:name}, @code{:age}, and
3968@code{:sex} to specify the initial values of these slots in the
3969new object. (Omitting any of these arguments leaves the corresponding
a05cb6e3 3970slot ``undefined'', according to the Common Lisp standard; in Emacs
4009494e
GM
3971Lisp, such uninitialized slots are filled with @code{nil}.)
3972
3973Given a @code{person}, @code{(copy-person @var{p})} makes a new
3974object of the same type whose slots are @code{eq} to those of @var{p}.
3975
3976Given any Lisp object @var{x}, @code{(person-p @var{x})} returns
685b0026 3977true if @var{x} looks like a @code{person}, and false otherwise. (Again,
4009494e
GM
3978in Common Lisp this predicate would be exact; in Emacs Lisp the
3979best it can do is verify that @var{x} is a vector of the correct
685b0026 3980length that starts with the correct tag symbol.)
4009494e
GM
3981
3982Accessors like @code{person-name} normally check their arguments
3983(effectively using @code{person-p}) and signal an error if the
3984argument is the wrong type. This check is affected by
3985@code{(optimize (safety @dots{}))} declarations. Safety level 1,
3986the default, uses a somewhat optimized check that will detect all
3987incorrect arguments, but may use an uninformative error message
3988(e.g., ``expected a vector'' instead of ``expected a @code{person}'').
3989Safety level 0 omits all checks except as provided by the underlying
3990@code{aref} call; safety levels 2 and 3 do rigorous checking that will
3991always print a descriptive error message for incorrect inputs.
3992@xref{Declarations}.
3993
3994@example
3995(setq dave (make-person :name "Dave" :sex 'male))
3996 @result{} [cl-struct-person "Dave" nil male]
3997(setq other (copy-person dave))
3998 @result{} [cl-struct-person "Dave" nil male]
3999(eq dave other)
4000 @result{} nil
4001(eq (person-name dave) (person-name other))
4002 @result{} t
4003(person-p dave)
4004 @result{} t
4005(person-p [1 2 3 4])
4006 @result{} nil
4007(person-p "Bogus")
4008 @result{} nil
4009(person-p '[cl-struct-person counterfeit person object])
4010 @result{} t
4011@end example
4012
4013In general, @var{name} is either a name symbol or a list of a name
4014symbol followed by any number of @dfn{struct options}; each @var{slot}
4015is either a slot symbol or a list of the form @samp{(@var{slot-name}
4016@var{default-value} @var{slot-options}@dots{})}. The @var{default-value}
685b0026 4017is a Lisp form that is evaluated any time an instance of the
4009494e
GM
4018structure type is created without specifying that slot's value.
4019
4020Common Lisp defines several slot options, but the only one
4021implemented in this package is @code{:read-only}. A non-@code{nil}
4022value for this option means the slot should not be @code{setf}-able;
4023the slot's value is determined when the object is created and does
4024not change afterward.
4025
4026@example
39a58b5b
GM
4027(cl-defstruct person
4028 (name nil :read-only t)
4029 age
4030 (sex 'unknown))
4009494e
GM
4031@end example
4032
4033Any slot options other than @code{:read-only} are ignored.
4034
4035For obscure historical reasons, structure options take a different
4036form than slot options. A structure option is either a keyword
4037symbol, or a list beginning with a keyword symbol possibly followed
4038by arguments. (By contrast, slot options are key-value pairs not
4039enclosed in lists.)
4040
4041@example
39a58b5b
GM
4042(cl-defstruct (person (:constructor create-person)
4043 (:type list)
4044 :named)
4045 name age sex)
4009494e
GM
4046@end example
4047
4048The following structure options are recognized.
4049
4050@table @code
4009494e
GM
4051@item :conc-name
4052The argument is a symbol whose print name is used as the prefix for
4053the names of slot accessor functions. The default is the name of
4054the struct type followed by a hyphen. The option @code{(:conc-name p-)}
4055would change this prefix to @code{p-}. Specifying @code{nil} as an
4056argument means no prefix, so that the slot names themselves are used
4057to name the accessor functions.
4058
4059@item :constructor
4060In the simple case, this option takes one argument which is an
4061alternate name to use for the constructor function. The default
4062is @code{make-@var{name}}, e.g., @code{make-person}. The above
4063example changes this to @code{create-person}. Specifying @code{nil}
4064as an argument means that no standard constructor should be
4065generated at all.
4066
4067In the full form of this option, the constructor name is followed
4068by an arbitrary argument list. @xref{Program Structure}, for a
4069description of the format of Common Lisp argument lists. All
4070options, such as @code{&rest} and @code{&key}, are supported.
4071The argument names should match the slot names; each slot is
4072initialized from the corresponding argument. Slots whose names
4073do not appear in the argument list are initialized based on the
4074@var{default-value} in their slot descriptor. Also, @code{&optional}
685b0026 4075and @code{&key} arguments that don't specify defaults take their
4009494e 4076defaults from the slot descriptor. It is valid to include arguments
685b0026 4077that don't correspond to slot names; these are useful if they are
4009494e 4078referred to in the defaults for optional, keyword, or @code{&aux}
685b0026 4079arguments that @emph{do} correspond to slots.
4009494e
GM
4080
4081You can specify any number of full-format @code{:constructor}
4082options on a structure. The default constructor is still generated
4083as well unless you disable it with a simple-format @code{:constructor}
4084option.
4085
4086@example
39a58b5b
GM
4087(cl-defstruct
4088 (person
4089 (:constructor nil) ; no default constructor
a05cb6e3
GM
4090 (:constructor new-person
4091 (name sex &optional (age 0)))
39a58b5b
GM
4092 (:constructor new-hound (&key (name "Rover")
4093 (dog-years 0)
4094 &aux (age (* 7 dog-years))
4095 (sex 'canine))))
4096 name age sex)
4009494e
GM
4097@end example
4098
4099The first constructor here takes its arguments positionally rather
4100than by keyword. (In official Common Lisp terminology, constructors
4101that work By Order of Arguments instead of by keyword are called
a05cb6e3 4102``BOA constructors''. No, I'm not making this up.) For example,
4009494e
GM
4103@code{(new-person "Jane" 'female)} generates a person whose slots
4104are @code{"Jane"}, 0, and @code{female}, respectively.
4105
4106The second constructor takes two keyword arguments, @code{:name},
4107which initializes the @code{name} slot and defaults to @code{"Rover"},
4108and @code{:dog-years}, which does not itself correspond to a slot
4109but which is used to initialize the @code{age} slot. The @code{sex}
4110slot is forced to the symbol @code{canine} with no syntax for
4111overriding it.
4112
4113@item :copier
4114The argument is an alternate name for the copier function for
4115this type. The default is @code{copy-@var{name}}. @code{nil}
4116means not to generate a copier function. (In this implementation,
4117all copier functions are simply synonyms for @code{copy-sequence}.)
4118
4119@item :predicate
685b0026 4120The argument is an alternate name for the predicate that recognizes
4009494e
GM
4121objects of this type. The default is @code{@var{name}-p}. @code{nil}
4122means not to generate a predicate function. (If the @code{:type}
4123option is used without the @code{:named} option, no predicate is
4124ever generated.)
4125
4126In true Common Lisp, @code{typep} is always able to recognize a
4127structure object even if @code{:predicate} was used. In this
a05cb6e3 4128package, @code{cl-typep} simply looks for a function called
4009494e
GM
4129@code{@var{typename}-p}, so it will work for structure types
4130only if they used the default predicate name.
4131
4132@item :include
4133This option implements a very limited form of C++-style inheritance.
4134The argument is the name of another structure type previously
39a58b5b 4135created with @code{cl-defstruct}. The effect is to cause the new
4009494e
GM
4136structure type to inherit all of the included structure's slots
4137(plus, of course, any new slots described by this struct's slot
4138descriptors). The new structure is considered a ``specialization''
4139of the included one. In fact, the predicate and slot accessors
4140for the included type will also accept objects of the new type.
4141
4142If there are extra arguments to the @code{:include} option after
4143the included-structure name, these options are treated as replacement
4144slot descriptors for slots in the included structure, possibly with
4145modified default values. Borrowing an example from Steele:
4146
4147@example
39a58b5b
GM
4148(cl-defstruct person name (age 0) sex)
4149 @result{} person
4150(cl-defstruct (astronaut (:include person (age 45)))
4151 helmet-size
4152 (favorite-beverage 'tang))
4153 @result{} astronaut
4009494e
GM
4154
4155(setq joe (make-person :name "Joe"))
4156 @result{} [cl-struct-person "Joe" 0 nil]
4157(setq buzz (make-astronaut :name "Buzz"))
4158 @result{} [cl-struct-astronaut "Buzz" 45 nil nil tang]
4159
4160(list (person-p joe) (person-p buzz))
4161 @result{} (t t)
4162(list (astronaut-p joe) (astronaut-p buzz))
4163 @result{} (nil t)
4164
4165(person-name buzz)
4166 @result{} "Buzz"
4167(astronaut-name joe)
4168 @result{} error: "astronaut-name accessing a non-astronaut"
4169@end example
4170
4171Thus, if @code{astronaut} is a specialization of @code{person},
4172then every @code{astronaut} is also a @code{person} (but not the
4173other way around). Every @code{astronaut} includes all the slots
4174of a @code{person}, plus extra slots that are specific to
4175astronauts. Operations that work on people (like @code{person-name})
4176work on astronauts just like other people.
4177
4178@item :print-function
4179In full Common Lisp, this option allows you to specify a function
685b0026 4180that is called to print an instance of the structure type. The
4009494e
GM
4181Emacs Lisp system offers no hooks into the Lisp printer which would
4182allow for such a feature, so this package simply ignores
4183@code{:print-function}.
4184
4185@item :type
4186The argument should be one of the symbols @code{vector} or @code{list}.
4187This tells which underlying Lisp data type should be used to implement
4188the new structure type. Vectors are used by default, but
4189@code{(:type list)} will cause structure objects to be stored as
4190lists instead.
4191
4192The vector representation for structure objects has the advantage
4193that all structure slots can be accessed quickly, although creating
4194vectors is a bit slower in Emacs Lisp. Lists are easier to create,
4195but take a relatively long time accessing the later slots.
4196
4197@item :named
4198This option, which takes no arguments, causes a characteristic ``tag''
4199symbol to be stored at the front of the structure object. Using
4200@code{:type} without also using @code{:named} will result in a
4201structure type stored as plain vectors or lists with no identifying
4202features.
4203
4204The default, if you don't specify @code{:type} explicitly, is to
4205use named vectors. Therefore, @code{:named} is only useful in
4206conjunction with @code{:type}.
4207
4208@example
39a58b5b
GM
4209(cl-defstruct (person1) name age sex)
4210(cl-defstruct (person2 (:type list) :named) name age sex)
4211(cl-defstruct (person3 (:type list)) name age sex)
4009494e
GM
4212
4213(setq p1 (make-person1))
4214 @result{} [cl-struct-person1 nil nil nil]
4215(setq p2 (make-person2))
4216 @result{} (person2 nil nil nil)
4217(setq p3 (make-person3))
4218 @result{} (nil nil nil)
4219
4220(person1-p p1)
4221 @result{} t
4222(person2-p p2)
4223 @result{} t
4224(person3-p p3)
4225 @result{} error: function person3-p undefined
4226@end example
4227
39a58b5b 4228Since unnamed structures don't have tags, @code{cl-defstruct} is not
4009494e
GM
4229able to make a useful predicate for recognizing them. Also,
4230accessors like @code{person3-name} will be generated but they
4231will not be able to do any type checking. The @code{person3-name}
4232function, for example, will simply be a synonym for @code{car} in
4233this case. By contrast, @code{person2-name} is able to verify
4234that its argument is indeed a @code{person2} object before
4235proceeding.
4236
4237@item :initial-offset
4238The argument must be a nonnegative integer. It specifies a
4239number of slots to be left ``empty'' at the front of the
4240structure. If the structure is named, the tag appears at the
4241specified position in the list or vector; otherwise, the first
4242slot appears at that position. Earlier positions are filled
4243with @code{nil} by the constructors and ignored otherwise. If
4244the type @code{:include}s another type, then @code{:initial-offset}
4245specifies a number of slots to be skipped between the last slot
4246of the included type and the first new slot.
4247@end table
e1117425 4248@end defmac
4009494e 4249
39a58b5b 4250Except as noted, the @code{cl-defstruct} facility of this package is
4009494e
GM
4251entirely compatible with that of Common Lisp.
4252
1d5b82ef 4253@node Assertions
4009494e
GM
4254@chapter Assertions and Errors
4255
4256@noindent
4257This section describes two macros that test @dfn{assertions}, i.e.,
4258conditions which must be true if the program is operating correctly.
4259Assertions never add to the behavior of a Lisp program; they simply
4260make ``sanity checks'' to make sure everything is as it should be.
4261
4262If the optimization property @code{speed} has been set to 3, and
4263@code{safety} is less than 3, then the byte-compiler will optimize
4264away the following assertions. Because assertions might be optimized
4265away, it is a bad idea for them to include side-effects.
4266
e1117425 4267@defmac cl-assert test-form [show-args string args@dots{}]
4009494e
GM
4268This form verifies that @var{test-form} is true (i.e., evaluates to
4269a non-@code{nil} value). If so, it returns @code{nil}. If the test
39a58b5b 4270is not satisfied, @code{cl-assert} signals an error.
4009494e
GM
4271
4272A default error message will be supplied which includes @var{test-form}.
4273You can specify a different error message by including a @var{string}
4274argument plus optional extra arguments. Those arguments are simply
4275passed to @code{error} to signal the error.
4276
4277If the optional second argument @var{show-args} is @code{t} instead
4278of @code{nil}, then the error message (with or without @var{string})
4279will also include all non-constant arguments of the top-level
4280@var{form}. For example:
4281
4282@example
39a58b5b 4283(cl-assert (> x 10) t "x is too small: %d")
4009494e
GM
4284@end example
4285
4286This usage of @var{show-args} is an extension to Common Lisp. In
4287true Common Lisp, the second argument gives a list of @var{places}
4288which can be @code{setf}'d by the user before continuing from the
4289error. Since Emacs Lisp does not support continuable errors, it
4290makes no sense to specify @var{places}.
e1117425 4291@end defmac
4009494e 4292
e1117425 4293@defmac cl-check-type form type [string]
4009494e 4294This form verifies that @var{form} evaluates to a value of type
39a58b5b 4295@var{type}. If so, it returns @code{nil}. If not, @code{cl-check-type}
4009494e
GM
4296signals a @code{wrong-type-argument} error. The default error message
4297lists the erroneous value along with @var{type} and @var{form}
4298themselves. If @var{string} is specified, it is included in the
4299error message in place of @var{type}. For example:
4300
4301@example
39a58b5b 4302(cl-check-type x (integer 1 *) "a positive integer")
4009494e
GM
4303@end example
4304
4305@xref{Type Predicates}, for a description of the type specifiers
4306that may be used for @var{type}.
4307
4308Note that in Common Lisp, the first argument to @code{check-type}
4309must be a @var{place} suitable for use by @code{setf}, because
4310@code{check-type} signals a continuable error that allows the
4311user to modify @var{place}.
e1117425 4312@end defmac
4009494e 4313
1d5b82ef 4314@node Efficiency Concerns
4009494e
GM
4315@appendix Efficiency Concerns
4316
4317@appendixsec Macros
4318
4319@noindent
39a58b5b 4320Many of the advanced features of this package, such as @code{cl-defun},
5887564d 4321@code{cl-loop}, etc., are implemented as Lisp macros. In
4009494e
GM
4322byte-compiled code, these complex notations will be expanded into
4323equivalent Lisp code which is simple and efficient. For example,
5887564d 4324the form
4009494e
GM
4325
4326@example
39a58b5b 4327(cl-incf i n)
4009494e
GM
4328@end example
4329
4330@noindent
5887564d 4331is expanded at compile-time to the Lisp form
4009494e
GM
4332
4333@example
4334(setq i (+ i n))
4009494e
GM
4335@end example
4336
4337@noindent
5887564d 4338which is the most efficient ways of doing this operation
4009494e 4339in Lisp. Thus, there is no performance penalty for using the more
5887564d 4340readable @code{cl-incf} form in your compiled code.
4009494e
GM
4341
4342@emph{Interpreted} code, on the other hand, must expand these macros
4343every time they are executed. For this reason it is strongly
4344recommended that code making heavy use of macros be compiled.
e1117425
GM
4345A loop using @code{cl-incf} a hundred times will execute considerably
4346faster if compiled, and will also garbage-collect less because the
4347macro expansion will not have to be generated, used, and thrown away a
4348hundred times.
4009494e
GM
4349
4350You can find out how a macro expands by using the
4351@code{cl-prettyexpand} function.
4352
4353@defun cl-prettyexpand form &optional full
4354This function takes a single Lisp form as an argument and inserts
4355a nicely formatted copy of it in the current buffer (which must be
4356in Lisp mode so that indentation works properly). It also expands
685b0026 4357all Lisp macros that appear in the form. The easiest way to use
a05cb6e3 4358this function is to go to the @file{*scratch*} buffer and type, say,
4009494e
GM
4359
4360@example
5887564d 4361(cl-prettyexpand '(cl-loop for x below 10 collect x))
4009494e
GM
4362@end example
4363
4364@noindent
4365and type @kbd{C-x C-e} immediately after the closing parenthesis;
685b0026 4366an expansion similar to:
4009494e
GM
4367
4368@example
39a58b5b
GM
4369(cl-block nil
4370 (let* ((x 0)
4371 (G1004 nil))
4372 (while (< x 10)
4373 (setq G1004 (cons x G1004))
4374 (setq x (+ x 1)))
4375 (nreverse G1004)))
4009494e
GM
4376@end example
4377
4378@noindent
39a58b5b 4379will be inserted into the buffer. (The @code{cl-block} macro is
4009494e
GM
4380expanded differently in the interpreter and compiler, so
4381@code{cl-prettyexpand} just leaves it alone. The temporary
39a58b5b 4382variable @code{G1004} was created by @code{cl-gensym}.)
4009494e
GM
4383
4384If the optional argument @var{full} is true, then @emph{all}
39a58b5b 4385macros are expanded, including @code{cl-block}, @code{cl-eval-when},
4009494e 4386and compiler macros. Expansion is done as if @var{form} were
685b0026
GM
4387a top-level form in a file being compiled.
4388
4389@c FIXME none of these examples are still applicable.
4390@ignore
4391For example,
4009494e
GM
4392
4393@example
39a58b5b
GM
4394(cl-prettyexpand '(cl-pushnew 'x list))
4395 @print{} (setq list (cl-adjoin 'x list))
4396(cl-prettyexpand '(cl-pushnew 'x list) t)
4009494e 4397 @print{} (setq list (if (memq 'x list) list (cons 'x list)))
39a58b5b 4398(cl-prettyexpand '(caddr (cl-member 'a list)) t)
4009494e
GM
4399 @print{} (car (cdr (cdr (memq 'a list))))
4400@end example
685b0026 4401@end ignore
4009494e 4402
39a58b5b 4403Note that @code{cl-adjoin}, @code{cl-caddr}, and @code{cl-member} all
4009494e
GM
4404have built-in compiler macros to optimize them in common cases.
4405@end defun
4406
4009494e
GM
4407@appendixsec Error Checking
4408
4409@noindent
4410Common Lisp compliance has in general not been sacrificed for the
4411sake of efficiency. A few exceptions have been made for cases
4412where substantial gains were possible at the expense of marginal
4413incompatibility.
4414
4415The Common Lisp standard (as embodied in Steele's book) uses the
685b0026 4416phrase ``it is an error if'' to indicate a situation that is not
4009494e
GM
4417supposed to arise in complying programs; implementations are strongly
4418encouraged but not required to signal an error in these situations.
4419This package sometimes omits such error checking in the interest of
39a58b5b 4420compactness and efficiency. For example, @code{cl-do} variable
4009494e
GM
4421specifiers are supposed to be lists of one, two, or three forms;
4422extra forms are ignored by this package rather than signaling a
39a58b5b 4423syntax error. The @code{cl-endp} function is simply a synonym for
4009494e
GM
4424@code{null} in this package. Functions taking keyword arguments
4425will accept an odd number of arguments, treating the trailing
4426keyword as if it were followed by the value @code{nil}.
4427
39a58b5b 4428Argument lists (as processed by @code{cl-defun} and friends)
4009494e
GM
4429@emph{are} checked rigorously except for the minor point just
4430mentioned; in particular, keyword arguments are checked for
4431validity, and @code{&allow-other-keys} and @code{:allow-other-keys}
4432are fully implemented. Keyword validity checking is slightly
4433time consuming (though not too bad in byte-compiled code);
4434you can use @code{&allow-other-keys} to omit this check. Functions
39a58b5b 4435defined in this package such as @code{cl-find} and @code{cl-member}
4009494e
GM
4436do check their keyword arguments for validity.
4437
685b0026 4438@appendixsec Compiler Optimizations
4009494e
GM
4439
4440@noindent
685b0026
GM
4441Changing the value of @code{byte-optimize} from the default @code{t}
4442is highly discouraged; many of the Common
4009494e 4443Lisp macros emit
685b0026 4444code that can be improved by optimization. In particular,
39a58b5b
GM
4445@code{cl-block}s (whether explicit or implicit in constructs like
4446@code{cl-defun} and @code{cl-loop}) carry a fair run-time penalty; the
685b0026 4447byte-compiler removes @code{cl-block}s that are not actually
39a58b5b 4448referenced by @code{cl-return} or @code{cl-return-from} inside the block.
4009494e 4449
1d5b82ef 4450@node Common Lisp Compatibility
4009494e
GM
4451@appendix Common Lisp Compatibility
4452
4453@noindent
3a4d1917 4454The following is a list of all known incompatibilities between this
4009494e
GM
4455package and Common Lisp as documented in Steele (2nd edition).
4456
39a58b5b 4457The word @code{cl-defun} is required instead of @code{defun} in order
4009494e 4458to use extended Common Lisp argument lists in a function. Likewise,
39a58b5b 4459@code{cl-defmacro} and @code{cl-function} are versions of those forms
4009494e 4460which understand full-featured argument lists. The @code{&whole}
3a4d1917 4461keyword does not work in @code{cl-defmacro} argument lists (except
4009494e
GM
4462inside recursive argument lists).
4463
0a3333b5 4464The @code{equal} predicate does not distinguish
39a58b5b 4465between IEEE floating-point plus and minus zero. The @code{cl-equalp}
4009494e
GM
4466predicate has several differences with Common Lisp; @pxref{Predicates}.
4467
39a58b5b 4468The @code{cl-do-all-symbols} form is the same as @code{cl-do-symbols}
4009494e
GM
4469with no @var{obarray} argument. In Common Lisp, this form would
4470iterate over all symbols in all packages. Since Emacs obarrays
4471are not a first-class package mechanism, there is no way for
39a58b5b 4472@code{cl-do-all-symbols} to locate any but the default obarray.
4009494e 4473
39a58b5b 4474The @code{cl-loop} macro is complete except that @code{loop-finish}
4009494e
GM
4475and type specifiers are unimplemented.
4476
4477The multiple-value return facility treats lists as multiple
4478values, since Emacs Lisp cannot support multiple return values
4479directly. The macros will be compatible with Common Lisp if
f94b04fc 4480@code{cl-values} or @code{cl-values-list} is always used to return to
39a58b5b 4481a @code{cl-multiple-value-bind} or other multiple-value receiver;
f94b04fc 4482if @code{cl-values} is used without @code{cl-multiple-value-@dots{}}
4009494e
GM
4483or vice-versa the effect will be different from Common Lisp.
4484
4485Many Common Lisp declarations are ignored, and others match
4486the Common Lisp standard in concept but not in detail. For
4487example, local @code{special} declarations, which are purely
4488advisory in Emacs Lisp, do not rigorously obey the scoping rules
4489set down in Steele's book.
4490
39a58b5b 4491The variable @code{cl--gensym-counter} starts out with a pseudo-random
4009494e
GM
4492value rather than with zero. This is to cope with the fact that
4493generated symbols become interned when they are written to and
4494loaded back from a file.
4495
39a58b5b 4496The @code{cl-defstruct} facility is compatible, except that structures
4009494e
GM
4497are of type @code{:type vector :named} by default rather than some
4498special, distinct type. Also, the @code{:type} slot option is ignored.
4499
39a58b5b 4500The second argument of @code{cl-check-type} is treated differently.
4009494e 4501
1d5b82ef 4502@node Porting Common Lisp
4009494e
GM
4503@appendix Porting Common Lisp
4504
4505@noindent
4506This package is meant to be used as an extension to Emacs Lisp,
4507not as an Emacs implementation of true Common Lisp. Some of the
4508remaining differences between Emacs Lisp and Common Lisp make it
4509difficult to port large Common Lisp applications to Emacs. For
4510one, some of the features in this package are not fully compliant
4511with ANSI or Steele; @pxref{Common Lisp Compatibility}. But there
4512are also quite a few features that this package does not provide
4513at all. Here are some major omissions that you will want to watch out
4514for when bringing Common Lisp code into Emacs.
4515
4516@itemize @bullet
4517@item
4518Case-insensitivity. Symbols in Common Lisp are case-insensitive
4519by default. Some programs refer to a function or variable as
4520@code{foo} in one place and @code{Foo} or @code{FOO} in another.
4521Emacs Lisp will treat these as three distinct symbols.
4522
4523Some Common Lisp code is written entirely in upper case. While Emacs
4524is happy to let the program's own functions and variables use
4525this convention, calls to Lisp builtins like @code{if} and
4526@code{defun} will have to be changed to lower case.
4527
4528@item
4529Lexical scoping. In Common Lisp, function arguments and @code{let}
3c0c6155
GM
4530bindings apply only to references physically within their bodies (or
4531within macro expansions in their bodies). Traditionally, Emacs Lisp
4532uses @dfn{dynamic scoping} wherein a binding to a variable is visible
9c52d61d
GM
4533even inside functions called from the body.
4534@xref{Dynamic Binding,,,elisp,GNU Emacs Lisp Reference Manual}.
4535Lexical binding is available since Emacs 24.1, so be sure to set
4536@code{lexical-binding} to @code{t} if you need to emulate this aspect
4537of Common Lisp. @xref{Lexical Binding,,,elisp,GNU Emacs Lisp Reference Manual}.
4009494e 4538
3c0c6155
GM
4539Here is an example of a Common Lisp code fragment that would fail in
4540Emacs Lisp if @code{lexical-binding} were set to @code{nil}:
4009494e
GM
4541
4542@example
4543(defun map-odd-elements (func list)
4544 (loop for x in list
4545 for flag = t then (not flag)
4546 collect (if flag x (funcall func x))))
4547
4548(defun add-odd-elements (list x)
db7a4b66 4549 (map-odd-elements (lambda (a) (+ a x)) list))
4009494e
GM
4550@end example
4551
4552@noindent
3c0c6155
GM
4553With lexical binding, the two functions' usages of @code{x} are
4554completely independent. With dynamic binding, the binding to @code{x}
4555made by @code{add-odd-elements} will have been hidden by the binding
4556in @code{map-odd-elements} by the time the @code{(+ a x)} function is
4557called.
4009494e 4558
3c0c6155 4559Internally, this package uses lexical binding so that such problems do
69c1c2e6 4560not occur. @xref{Obsolete Lexical Binding}, for a description of the obsolete
3c0c6155
GM
4561@code{lexical-let} form that emulates a Common Lisp-style lexical
4562binding when dynamic binding is in use.
4009494e
GM
4563
4564@item
4565Reader macros. Common Lisp includes a second type of macro that
4566works at the level of individual characters. For example, Common
4567Lisp implements the quote notation by a reader macro called @code{'},
4568whereas Emacs Lisp's parser just treats quote as a special case.
4569Some Lisp packages use reader macros to create special syntaxes
4570for themselves, which the Emacs parser is incapable of reading.
4571
4009494e
GM
4572@item
4573Other syntactic features. Common Lisp provides a number of
4574notations beginning with @code{#} that the Emacs Lisp parser
df43dd53 4575won't understand. For example, @samp{#| @dots{} |#} is an
4009494e
GM
4576alternate comment notation, and @samp{#+lucid (foo)} tells
4577the parser to ignore the @code{(foo)} except in Lucid Common
4578Lisp.
4579
4580@item
4581Packages. In Common Lisp, symbols are divided into @dfn{packages}.
4582Symbols that are Lisp built-ins are typically stored in one package;
4583symbols that are vendor extensions are put in another, and each
4584application program would have a package for its own symbols.
4585Certain symbols are ``exported'' by a package and others are
4586internal; certain packages ``use'' or import the exported symbols
4587of other packages. To access symbols that would not normally be
4588visible due to this importing and exporting, Common Lisp provides
4589a syntax like @code{package:symbol} or @code{package::symbol}.
4590
4591Emacs Lisp has a single namespace for all interned symbols, and
4592then uses a naming convention of putting a prefix like @code{cl-}
4593in front of the name. Some Emacs packages adopt the Common Lisp-like
4594convention of using @code{cl:} or @code{cl::} as the prefix.
4595However, the Emacs parser does not understand colons and just
4596treats them as part of the symbol name. Thus, while @code{mapcar}
4597and @code{lisp:mapcar} may refer to the same symbol in Common
4598Lisp, they are totally distinct in Emacs Lisp. Common Lisp
3a4d1917 4599programs that refer to a symbol by the full name sometimes
4009494e
GM
4600and the short name other times will not port cleanly to Emacs.
4601
a05cb6e3 4602Emacs Lisp does have a concept of ``obarrays'', which are
4009494e
GM
4603package-like collections of symbols, but this feature is not
4604strong enough to be used as a true package mechanism.
4605
4606@item
4607The @code{format} function is quite different between Common
4608Lisp and Emacs Lisp. It takes an additional ``destination''
4609argument before the format string. A destination of @code{nil}
4610means to format to a string as in Emacs Lisp; a destination
4611of @code{t} means to write to the terminal (similar to
4612@code{message} in Emacs). Also, format control strings are
4613utterly different; @code{~} is used instead of @code{%} to
4614introduce format codes, and the set of available codes is
4615much richer. There are no notations like @code{\n} for
4616string literals; instead, @code{format} is used with the
4617``newline'' format code, @code{~%}. More advanced formatting
4618codes provide such features as paragraph filling, case
4619conversion, and even loops and conditionals.
4620
4621While it would have been possible to implement most of Common
a05cb6e3 4622Lisp @code{format} in this package (under the name @code{cl-format},
4009494e
GM
4623of course), it was not deemed worthwhile. It would have required
4624a huge amount of code to implement even a decent subset of
df43dd53 4625@code{format}, yet the functionality it would provide over
4009494e
GM
4626Emacs Lisp's @code{format} would rarely be useful.
4627
4628@item
4629Vector constants use square brackets in Emacs Lisp, but
4630@code{#(a b c)} notation in Common Lisp. To further complicate
4631matters, Emacs has its own @code{#(} notation for
4632something entirely different---strings with properties.
4633
4634@item
0a3333b5
RS
4635Characters are distinct from integers in Common Lisp. The notation
4636for character constants is also different: @code{#\A} in Common Lisp
4637where Emacs Lisp uses @code{?A}. Also, @code{string=} and
4638@code{string-equal} are synonyms in Emacs Lisp, whereas the latter is
4639case-insensitive in Common Lisp.
4009494e
GM
4640
4641@item
4642Data types. Some Common Lisp data types do not exist in Emacs
4643Lisp. Rational numbers and complex numbers are not present,
4644nor are large integers (all integers are ``fixnums''). All
4645arrays are one-dimensional. There are no readtables or pathnames;
4646streams are a set of existing data types rather than a new data
4647type of their own. Hash tables, random-states, structures, and
4648packages (obarrays) are built from Lisp vectors or lists rather
4649than being distinct types.
4650
4651@item
4652The Common Lisp Object System (CLOS) is not implemented,
4653nor is the Common Lisp Condition System. However, the EIEIO package
159e3ad5 4654(@pxref{Top, , Introduction, eieio, EIEIO}) does implement some
4009494e
GM
4655CLOS functionality.
4656
4657@item
4658Common Lisp features that are completely redundant with Emacs
4659Lisp features of a different name generally have not been
4660implemented. For example, Common Lisp writes @code{defconstant}
4661where Emacs Lisp uses @code{defconst}. Similarly, @code{make-list}
4662takes its arguments in different ways in the two Lisps but does
4663exactly the same thing, so this package has not bothered to
4664implement a Common Lisp-style @code{make-list}.
4665
4666@item
4667A few more notable Common Lisp features not included in this
4668package: @code{compiler-let}, @code{tagbody}, @code{prog},
4669@code{ldb/dpb}, @code{parse-integer}, @code{cerror}.
4670
4671@item
4672Recursion. While recursion works in Emacs Lisp just like it
4673does in Common Lisp, various details of the Emacs Lisp system
4674and compiler make recursion much less efficient than it is in
4675most Lisps. Some schools of thought prefer to use recursion
4676in Lisp over other techniques; they would sum a list of
4677numbers using something like
4678
4679@example
4680(defun sum-list (list)
4681 (if list
4682 (+ (car list) (sum-list (cdr list)))
4683 0))
4684@end example
4685
4686@noindent
4687where a more iteratively-minded programmer might write one of
4688these forms:
4689
4690@example
df43dd53
GM
4691(let ((total 0)) (dolist (x my-list) (incf total x)) total)
4692(loop for x in my-list sum x)
4009494e
GM
4693@end example
4694
4695While this would be mainly a stylistic choice in most Common Lisps,
4696in Emacs Lisp you should be aware that the iterative forms are
4697much faster than recursion. Also, Lisp programmers will want to
4698note that the current Emacs Lisp compiler does not optimize tail
4699recursion.
4700@end itemize
4701
3c0c6155
GM
4702@node Obsolete Features
4703@appendix Obsolete Features
4704
4705This section describes some features of the package that are obsolete
f94b04fc
GM
4706and should not be used in new code. They are either only provided by
4707the old @file{cl.el} entry point, not by the newer @file{cl-lib.el};
4708or where versions with a @samp{cl-} prefix do exist they do not behave
4709in exactly the same way.
3c0c6155
GM
4710
4711@menu
69c1c2e6
GM
4712* Obsolete Lexical Binding:: An approximation of lexical binding.
4713* Obsolete Macros:: Obsolete macros.
f94b04fc 4714* Obsolete Setf Customization:: Obsolete ways to customize setf.
3c0c6155
GM
4715@end menu
4716
69c1c2e6
GM
4717@node Obsolete Lexical Binding
4718@appendixsec Obsolete Lexical Binding
3c0c6155
GM
4719
4720The following macros are extensions to Common Lisp, where all bindings
4721are lexical unless declared otherwise. These features are likewise
4722obsolete since the introduction of true lexical binding in Emacs 24.1.
4723
4724@defmac lexical-let (bindings@dots{}) forms@dots{}
4725This form is exactly like @code{let} except that the bindings it
4726establishes are purely lexical.
4727@end defmac
4728
4729@c FIXME remove this and refer to elisp manual.
4730@c Maybe merge some stuff from here to there?
4731@noindent
4732Lexical bindings are similar to local variables in a language like C:
4733Only the code physically within the body of the @code{lexical-let}
4734(after macro expansion) may refer to the bound variables.
4735
4736@example
4737(setq a 5)
4738(defun foo (b) (+ a b))
4739(let ((a 2)) (foo a))
4740 @result{} 4
4741(lexical-let ((a 2)) (foo a))
4742 @result{} 7
4743@end example
4744
4745@noindent
4746In this example, a regular @code{let} binding of @code{a} actually
4747makes a temporary change to the global variable @code{a}, so @code{foo}
4748is able to see the binding of @code{a} to 2. But @code{lexical-let}
4749actually creates a distinct local variable @code{a} for use within its
4750body, without any effect on the global variable of the same name.
4751
4752The most important use of lexical bindings is to create @dfn{closures}.
4753A closure is a function object that refers to an outside lexical
9c52d61d
GM
4754variable (@pxref{Closures,,,elisp,GNU Emacs Lisp Reference Manual}).
4755For example:
3c0c6155
GM
4756
4757@example
4758(defun make-adder (n)
4759 (lexical-let ((n n))
4760 (function (lambda (m) (+ n m)))))
4761(setq add17 (make-adder 17))
4762(funcall add17 4)
4763 @result{} 21
4764@end example
4765
4766@noindent
4767The call @code{(make-adder 17)} returns a function object which adds
476817 to its argument. If @code{let} had been used instead of
4769@code{lexical-let}, the function object would have referred to the
4770global @code{n}, which would have been bound to 17 only during the
4771call to @code{make-adder} itself.
4772
4773@example
4774(defun make-counter ()
4775 (lexical-let ((n 0))
4776 (cl-function (lambda (&optional (m 1)) (cl-incf n m)))))
4777(setq count-1 (make-counter))
4778(funcall count-1 3)
4779 @result{} 3
4780(funcall count-1 14)
4781 @result{} 17
4782(setq count-2 (make-counter))
4783(funcall count-2 5)
4784 @result{} 5
4785(funcall count-1 2)
4786 @result{} 19
4787(funcall count-2)
4788 @result{} 6
4789@end example
4790
4791@noindent
4792Here we see that each call to @code{make-counter} creates a distinct
4793local variable @code{n}, which serves as a private counter for the
4794function object that is returned.
4795
4796Closed-over lexical variables persist until the last reference to
4797them goes away, just like all other Lisp objects. For example,
4798@code{count-2} refers to a function object which refers to an
4799instance of the variable @code{n}; this is the only reference
4800to that variable, so after @code{(setq count-2 nil)} the garbage
4801collector would be able to delete this instance of @code{n}.
4802Of course, if a @code{lexical-let} does not actually create any
4803closures, then the lexical variables are free as soon as the
4804@code{lexical-let} returns.
4805
4806Many closures are used only during the extent of the bindings they
4807refer to; these are known as ``downward funargs'' in Lisp parlance.
4808When a closure is used in this way, regular Emacs Lisp dynamic
4809bindings suffice and will be more efficient than @code{lexical-let}
4810closures:
4811
4812@example
4813(defun add-to-list (x list)
4814 (mapcar (lambda (y) (+ x y))) list)
4815(add-to-list 7 '(1 2 5))
4816 @result{} (8 9 12)
4817@end example
4818
4819@noindent
4820Since this lambda is only used while @code{x} is still bound,
4821it is not necessary to make a true closure out of it.
4822
4823You can use @code{defun} or @code{flet} inside a @code{lexical-let}
4824to create a named closure. If several closures are created in the
4825body of a single @code{lexical-let}, they all close over the same
4826instance of the lexical variable.
4827
4828@defmac lexical-let* (bindings@dots{}) forms@dots{}
4829This form is just like @code{lexical-let}, except that the bindings
4830are made sequentially in the manner of @code{let*}.
4831@end defmac
4832
69c1c2e6
GM
4833@node Obsolete Macros
4834@appendixsec Obsolete Macros
f94b04fc 4835
69c1c2e6
GM
4836The following macros are obsolete, and are replaced by versions with
4837a @samp{cl-} prefix that do not behave in exactly the same way.
4838Consequently, the @file{cl.el} versions are not simply aliases to the
4839@file{cl-lib.el} versions.
f94b04fc
GM
4840
4841@defmac flet (bindings@dots{}) forms@dots{}
69c1c2e6
GM
4842This macro is replaced by @code{cl-flet} (@pxref{Function Bindings}),
4843which behaves the same way as Common Lisp's @code{flet}.
4844This @code{flet} takes the same arguments as @code{cl-flet}, but does
4845not behave in precisely the same way.
4846
4847While @code{flet} in Common Lisp establishes a lexical function
4848binding, this @code{flet} makes a dynamic binding (it dates from a
4849time before Emacs had lexical binding). The result is
4850that @code{flet} affects indirect calls to a function as well as calls
4851directly inside the @code{flet} form itself.
4852
e8693c96
GM
4853This will even work on Emacs primitives, although note that some calls
4854to primitive functions internal to Emacs are made without going
4855through the symbol's function cell, and so will not be affected by
4856@code{flet}. For example,
4857
4858@example
4859(flet ((message (&rest args) (push args saved-msgs)))
4860 (do-something))
4861@end example
4862
4863This code attempts to replace the built-in function @code{message}
4864with a function that simply saves the messages in a list rather
4865than displaying them. The original definition of @code{message}
4866will be restored after @code{do-something} exits. This code will
4867work fine on messages generated by other Lisp code, but messages
4868generated directly inside Emacs will not be caught since they make
4869direct C-language calls to the message routines rather than going
4870through the Lisp @code{message} function.
4871
69c1c2e6 4872@c Bug#411.
1df7defd 4873Note that many primitives (e.g., @code{+}) have special byte-compile
69c1c2e6
GM
4874handling. Attempts to redefine such functions using @code{flet} will
4875fail if byte-compiled.
4876@c Or cl-flet.
4877@c In such cases, use @code{labels} instead.
f94b04fc
GM
4878@end defmac
4879
4880@defmac labels (bindings@dots{}) forms@dots{}
69c1c2e6
GM
4881This macro is replaced by @code{cl-labels} (@pxref{Function Bindings}),
4882which behaves the same way as Common Lisp's @code{labels}.
4883This @code{labels} takes the same arguments as @code{cl-labels}, but
4884does not behave in precisely the same way.
4885
4886This version of @code{labels} uses the obsolete @code{lexical-let}
4887form (@pxref{Obsolete Lexical Binding}), rather than the true
4888lexical binding that @code{cl-labels} uses.
f94b04fc
GM
4889@end defmac
4890
4891@defmac letf (bindings@dots{}) forms@dots{}
4ddedf94
GM
4892This macro is almost exactly the same as @code{cl-letf}, which
4893replaces it (@pxref{Modify Macros}). The only difference is in
4894details that relate to some deprecated usage of @code{symbol-function}
4895in place forms.
f94b04fc
GM
4896@end defmac
4897
4898@node Obsolete Setf Customization
4899@appendixsec Obsolete Ways to Customize Setf
4900
d571e9c3
GM
4901Common Lisp defines three macros, @code{define-modify-macro},
4902@code{defsetf}, and @code{define-setf-method}, that allow the
4903user to extend generalized variables in various ways.
4904In Emacs, these are obsolete, replaced by various features of
940eac6d
GM
4905@file{gv.el} in Emacs 24.3.
4906@xref{Adding Generalized Variables,,,elisp,GNU Emacs Lisp Reference Manual}.
4907
d571e9c3
GM
4908
4909@defmac define-modify-macro name arglist function [doc-string]
4910This macro defines a ``read-modify-write'' macro similar to
940eac6d
GM
4911@code{cl-incf} and @code{cl-decf}. You can replace this macro
4912with @code{gv-letplace}.
4913
4914The macro @var{name} is defined to take a @var{place} argument
4915followed by additional arguments described by @var{arglist}. The call
d571e9c3
GM
4916
4917@example
df43dd53 4918(@var{name} @var{place} @var{args}@dots{})
d571e9c3
GM
4919@end example
4920
4921@noindent
4922will be expanded to
f94b04fc 4923
d571e9c3 4924@example
df43dd53 4925(cl-callf @var{func} @var{place} @var{args}@dots{})
d571e9c3
GM
4926@end example
4927
4928@noindent
4929which in turn is roughly equivalent to
4930
4931@example
df43dd53 4932(setf @var{place} (@var{func} @var{place} @var{args}@dots{}))
d571e9c3
GM
4933@end example
4934
4935For example:
4936
4937@example
940eac6d
GM
4938(define-modify-macro incf (&optional (n 1)) +)
4939(define-modify-macro concatf (&rest args) concat)
d571e9c3
GM
4940@end example
4941
4942Note that @code{&key} is not allowed in @var{arglist}, but
4943@code{&rest} is sufficient to pass keywords on to the function.
4944
4945Most of the modify macros defined by Common Lisp do not exactly
4946follow the pattern of @code{define-modify-macro}. For example,
4947@code{push} takes its arguments in the wrong order, and @code{pop}
ab7f1c43 4948is completely irregular.
940eac6d
GM
4949
4950The above @code{incf} example could be written using
4951@code{gv-letplace} as:
4952@example
4953(defmacro incf (place &optional n)
4954 (gv-letplace (getter setter) place
4955 (macroexp-let2 nil v (or n 1)
4956 (funcall setter `(+ ,v ,getter)))))
4957@end example
4958@ignore
4959(defmacro concatf (place &rest args)
4960 (gv-letplace (getter setter) place
4961 (macroexp-let2 nil v (mapconcat 'identity args "")
4962 (funcall setter `(concat ,getter ,v)))))
4963@end ignore
f94b04fc
GM
4964@end defmac
4965
4966@defmac defsetf access-fn update-fn
2ee1d59f 4967This is the simpler of two @code{defsetf} forms, and is
940eac6d 4968replaced by @code{gv-define-simple-setter}.
a358a44e 4969
940eac6d 4970With @var{access-fn} the name of a function that accesses a place,
a358a44e
GM
4971this declares @var{update-fn} to be the corresponding store function.
4972From now on,
d571e9c3
GM
4973
4974@example
4975(setf (@var{access-fn} @var{arg1} @var{arg2} @var{arg3}) @var{value})
4976@end example
4977
4978@noindent
4979will be expanded to
4980
4981@example
4982(@var{update-fn} @var{arg1} @var{arg2} @var{arg3} @var{value})
4983@end example
4984
4985@noindent
4986The @var{update-fn} is required to be either a true function, or
a358a44e 4987a macro that evaluates its arguments in a function-like way. Also,
d571e9c3
GM
4988the @var{update-fn} is expected to return @var{value} as its result.
4989Otherwise, the above expansion would not obey the rules for the way
4990@code{setf} is supposed to behave.
4991
4992As a special (non-Common-Lisp) extension, a third argument of @code{t}
3a4d1917 4993to @code{defsetf} says that the return value of @code{update-fn} is
d571e9c3
GM
4994not suitable, so that the above @code{setf} should be expanded to
4995something more like
4996
4997@example
2ee1d59f
GM
4998(let ((temp @var{value}))
4999 (@var{update-fn} @var{arg1} @var{arg2} @var{arg3} temp)
5000 temp)
d571e9c3
GM
5001@end example
5002
a358a44e 5003Some examples are:
d571e9c3
GM
5004
5005@example
5006(defsetf car setcar)
d571e9c3
GM
5007(defsetf buffer-name rename-buffer t)
5008@end example
940eac6d
GM
5009
5010These translate directly to @code{gv-define-simple-setter}:
5011
5012@example
5013(gv-define-simple-setter car setcar)
5014(gv-define-simple-setter buffer-name rename-buffer t)
5015@end example
f94b04fc
GM
5016@end defmac
5017
d571e9c3 5018@defmac defsetf access-fn arglist (store-var) forms@dots{}
031b2ea7
GM
5019This is the second, more complex, form of @code{defsetf}.
5020It can be replaced by @code{gv-define-setter}.
5021
5022This form of @code{defsetf} is rather like @code{defmacro} except for
5023the additional @var{store-var} argument. The @var{forms} should
5024return a Lisp form that stores the value of @var{store-var} into the
5025generalized variable formed by a call to @var{access-fn} with
5026arguments described by @var{arglist}. The @var{forms} may begin with
5027a string which documents the @code{setf} method (analogous to the doc
5028string that appears at the front of a function).
d571e9c3
GM
5029
5030For example, the simple form of @code{defsetf} is shorthand for
5031
5032@example
5033(defsetf @var{access-fn} (&rest args) (store)
5034 (append '(@var{update-fn}) args (list store)))
5035@end example
5036
5037The Lisp form that is returned can access the arguments from
5038@var{arglist} and @var{store-var} in an unrestricted fashion;
3a4d1917 5039macros like @code{cl-incf} that invoke this
d571e9c3
GM
5040setf-method will insert temporary variables as needed to make
5041sure the apparent order of evaluation is preserved.
5042
031b2ea7 5043Another standard example:
d571e9c3
GM
5044
5045@example
5046(defsetf nth (n x) (store)
031b2ea7
GM
5047 `(setcar (nthcdr ,n ,x) ,store))
5048@end example
5049
5050You could write this using @code{gv-define-setter} as:
5051
5052@example
5053(gv-define-setter nth (store n x)
5054 `(setcar (nthcdr ,n ,x) ,store))
d571e9c3 5055@end example
f94b04fc
GM
5056@end defmac
5057
d571e9c3 5058@defmac define-setf-method access-fn arglist forms@dots{}
bdd8064f
GM
5059This is the most general way to create new place forms. You can
5060replace this by @code{gv-define-setter} or @code{gv-define-expander}.
5061
5062When a @code{setf} to @var{access-fn} with arguments described by
5063@var{arglist} is expanded, the @var{forms} are evaluated and must
5064return a list of five items:
d571e9c3
GM
5065
5066@enumerate
5067@item
5068A list of @dfn{temporary variables}.
5069
5070@item
5071A list of @dfn{value forms} corresponding to the temporary variables
5072above. The temporary variables will be bound to these value forms
5073as the first step of any operation on the generalized variable.
5074
5075@item
5076A list of exactly one @dfn{store variable} (generally obtained
5077from a call to @code{gensym}).
5078
5079@item
3a4d1917 5080A Lisp form that stores the contents of the store variable into
d571e9c3
GM
5081the generalized variable, assuming the temporaries have been
5082bound as described above.
5083
5084@item
3a4d1917 5085A Lisp form that accesses the contents of the generalized variable,
d571e9c3
GM
5086assuming the temporaries have been bound.
5087@end enumerate
5088
5089This is exactly like the Common Lisp macro of the same name,
5090except that the method returns a list of five values rather
5091than the five values themselves, since Emacs Lisp does not
5092support Common Lisp's notion of multiple return values.
bdd8064f
GM
5093(Note that the @code{setf} implementation provided by @file{gv.el}
5094does not use this five item format. Its use here is only for
5095backwards compatibility.)
d571e9c3
GM
5096
5097Once again, the @var{forms} may begin with a documentation string.
5098
5099A setf-method should be maximally conservative with regard to
5100temporary variables. In the setf-methods generated by
5101@code{defsetf}, the second return value is simply the list of
5102arguments in the place form, and the first return value is a
5103list of a corresponding number of temporary variables generated
3a4d1917
GM
5104@c FIXME I don't think this is true anymore.
5105by @code{cl-gensym}. Macros like @code{cl-incf} that
d571e9c3
GM
5106use this setf-method will optimize away most temporaries that
5107turn out to be unnecessary, so there is little reason for the
5108setf-method itself to optimize.
5109@end defmac
5110
ab7f1c43
GM
5111@c Removed in Emacs 24.3, not possible to make a compatible replacement.
5112@ignore
d571e9c3
GM
5113@defun get-setf-method place &optional env
5114This function returns the setf-method for @var{place}, by
5115invoking the definition previously recorded by @code{defsetf}
5116or @code{define-setf-method}. The result is a list of five
5117values as described above. You can use this function to build
3a4d1917 5118your own @code{cl-incf}-like modify macros.
d571e9c3
GM
5119
5120The argument @var{env} specifies the ``environment'' to be
5121passed on to @code{macroexpand} if @code{get-setf-method} should
5122need to expand a macro in @var{place}. It should come from
5123an @code{&environment} argument to the macro or setf-method
5124that called @code{get-setf-method}.
d571e9c3 5125@end defun
ab7f1c43 5126@end ignore
d571e9c3 5127
3c0c6155 5128
1d5b82ef 5129@node GNU Free Documentation License
4009494e
GM
5130@appendix GNU Free Documentation License
5131@include doclicense.texi
5132
1d5b82ef 5133@node Function Index
4009494e
GM
5134@unnumbered Function Index
5135
5136@printindex fn
5137
1d5b82ef 5138@node Variable Index
4009494e
GM
5139@unnumbered Variable Index
5140
5141@printindex vr
5142
4009494e 5143@bye