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