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