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