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