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