Update sample code for adding font-lock-keywords
[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
76162e12
DL
303member remove remq
304floatp-safe lexical-let lexical-let*
6bf7aab6
DL
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'
2995b042 973* Iteration:: `do', `dotimes', `dolist', `do-symbols'
6bf7aab6
DL
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}
2995b042 1927(@pxref{Iteration}) except that the variable @code{x} becomes a true
6bf7aab6
DL
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,
2995b042 2061such as @code{loop} and @code{dolist}, also create implicit blocks
6bf7aab6
DL
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})}.
2995b042 2084Common Lisp loops like @code{do} and @code{dolist} implicitly enclose
6bf7aab6
DL
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
2995b042
DL
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. Unlike with Emacs's built in @code{dolist}, the loop is
2201surrounded by an implicit @code{nil} block.
2202@end defspec
2203
2204@defspec dotimes (var count [result]) forms@dots{}
2205This is a more specialized loop which iterates a specified number
2206of times. The body is executed with @var{var} bound to the integers
2207from zero (inclusive) to @var{count} (exclusive), in turn. Then
2208the @code{result} form is evaluated with @var{var} bound to the total
2209number of iterations that were done (i.e., @code{(max 0 @var{count})})
2210to get the return value for the loop form. Unlike with Emacs's built in
2211@code{dolist}, the loop is surrounded by an implicit @code{nil} block.
2212@end defspec
2213
6bf7aab6
DL
2214@defspec do-symbols (var [obarray [result]]) forms@dots{}
2215This loop iterates over all interned symbols. If @var{obarray}
2216is specified and is not @code{nil}, it loops over all symbols in
2217that obarray. For each symbol, the body @var{forms} are evaluated
2218with @var{var} bound to that symbol. The symbols are visited in
2219an unspecified order. Afterward the @var{result} form, if any,
2220is evaluated (with @var{var} bound to @code{nil}) to get the return
2221value. The loop is surrounded by an implicit @code{nil} block.
2222@end defspec
2223
2224@defspec do-all-symbols (var [result]) forms@dots{}
2225This is identical to @code{do-symbols} except that the @var{obarray}
2226argument is omitted; it always iterates over the default obarray.
2227@end defspec
2228
2229@xref{Mapping over Sequences}, for some more functions for
2230iterating over vectors or lists.
2231
2232@node Loop Facility, Multiple Values, Iteration, Control Structure
2233@section Loop Facility
2234
2235@noindent
2236A common complaint with Lisp's traditional looping constructs is
2237that they are either too simple and limited, such as Common Lisp's
2238@code{dotimes} or Emacs Lisp's @code{while}, or too unreadable and
2239obscure, like Common Lisp's @code{do} loop.
2240
2241To remedy this, recent versions of Common Lisp have added a new
2242construct called the ``Loop Facility'' or ``@code{loop} macro,''
2243with an easy-to-use but very powerful and expressive syntax.
2244
2245@menu
2246* Loop Basics:: `loop' macro, basic clause structure
2247* Loop Examples:: Working examples of `loop' macro
2248* For Clauses:: Clauses introduced by `for' or `as'
2249* Iteration Clauses:: `repeat', `while', `thereis', etc.
2250* Accumulation Clauses:: `collect', `sum', `maximize', etc.
2251* Other Clauses:: `with', `if', `initially', `finally'
2252@end menu
2253
2254@node Loop Basics, Loop Examples, Loop Facility, Loop Facility
2255@subsection Loop Basics
2256
2257@noindent
2258The @code{loop} macro essentially creates a mini-language within
2259Lisp that is specially tailored for describing loops. While this
2260language is a little strange-looking by the standards of regular Lisp,
2261it turns out to be very easy to learn and well-suited to its purpose.
2262
2263Since @code{loop} is a macro, all parsing of the loop language
2264takes place at byte-compile time; compiled @code{loop}s are just
2265as efficient as the equivalent @code{while} loops written longhand.
2266
2267@defspec loop clauses@dots{}
2268A loop construct consists of a series of @var{clause}s, each
2269introduced by a symbol like @code{for} or @code{do}. Clauses
2270are simply strung together in the argument list of @code{loop},
2271with minimal extra parentheses. The various types of clauses
2272specify initializations, such as the binding of temporary
2273variables, actions to be taken in the loop, stepping actions,
2274and final cleanup.
2275
2276Common Lisp specifies a certain general order of clauses in a
2277loop:
2278
2279@example
2280(loop @var{name-clause}
2281 @var{var-clauses}@dots{}
2282 @var{action-clauses}@dots{})
2283@end example
2284
2285The @var{name-clause} optionally gives a name to the implicit
2286block that surrounds the loop. By default, the implicit block
2287is named @code{nil}. The @var{var-clauses} specify what
2288variables should be bound during the loop, and how they should
2289be modified or iterated throughout the course of the loop. The
2290@var{action-clauses} are things to be done during the loop, such
2291as computing, collecting, and returning values.
2292
2293The Emacs version of the @code{loop} macro is less restrictive about
2294the order of clauses, but things will behave most predictably if
2295you put the variable-binding clauses @code{with}, @code{for}, and
2296@code{repeat} before the action clauses. As in Common Lisp,
2297@code{initially} and @code{finally} clauses can go anywhere.
2298
2299Loops generally return @code{nil} by default, but you can cause
2300them to return a value by using an accumulation clause like
2301@code{collect}, an end-test clause like @code{always}, or an
2302explicit @code{return} clause to jump out of the implicit block.
2303(Because the loop body is enclosed in an implicit block, you can
2304also use regular Lisp @code{return} or @code{return-from} to
2305break out of the loop.)
2306@end defspec
2307
2308The following sections give some examples of the Loop Macro in
2309action, and describe the particular loop clauses in great detail.
2310Consult the second edition of Steele's @dfn{Common Lisp, the Language},
2311for additional discussion and examples of the @code{loop} macro.
2312
2313@node Loop Examples, For Clauses, Loop Basics, Loop Facility
2314@subsection Loop Examples
2315
2316@noindent
2317Before listing the full set of clauses that are allowed, let's
2318look at a few example loops just to get a feel for the @code{loop}
2319language.
2320
2321@example
2322(loop for buf in (buffer-list)
2323 collect (buffer-file-name buf))
2324@end example
2325
2326@noindent
2327This loop iterates over all Emacs buffers, using the list
2328returned by @code{buffer-list}. For each buffer @code{buf},
2329it calls @code{buffer-file-name} and collects the results into
2330a list, which is then returned from the @code{loop} construct.
2331The result is a list of the file names of all the buffers in
2332Emacs' memory. The words @code{for}, @code{in}, and @code{collect}
2333are reserved words in the @code{loop} language.
2334
2335@example
2336(loop repeat 20 do (insert "Yowsa\n"))
2337@end example
2338
2339@noindent
2340This loop inserts the phrase ``Yowsa'' twenty times in the
2341current buffer.
2342
2343@example
2344(loop until (eobp) do (munch-line) (forward-line 1))
2345@end example
2346
2347@noindent
2348This loop calls @code{munch-line} on every line until the end
2349of the buffer. If point is already at the end of the buffer,
2350the loop exits immediately.
2351
2352@example
2353(loop do (munch-line) until (eobp) do (forward-line 1))
2354@end example
2355
2356@noindent
2357This loop is similar to the above one, except that @code{munch-line}
2358is always called at least once.
2359
2360@example
2361(loop for x from 1 to 100
2362 for y = (* x x)
2363 until (>= y 729)
2364 finally return (list x (= y 729)))
2365@end example
2366
2367@noindent
2368This more complicated loop searches for a number @code{x} whose
2369square is 729. For safety's sake it only examines @code{x}
2370values up to 100; dropping the phrase @samp{to 100} would
2371cause the loop to count upwards with no limit. The second
2372@code{for} clause defines @code{y} to be the square of @code{x}
2373within the loop; the expression after the @code{=} sign is
2374reevaluated each time through the loop. The @code{until}
2375clause gives a condition for terminating the loop, and the
2376@code{finally} clause says what to do when the loop finishes.
2377(This particular example was written less concisely than it
2378could have been, just for the sake of illustration.)
2379
2380Note that even though this loop contains three clauses (two
2381@code{for}s and an @code{until}) that would have been enough to
2382define loops all by themselves, it still creates a single loop
2383rather than some sort of triple-nested loop. You must explicitly
2384nest your @code{loop} constructs if you want nested loops.
2385
2386@node For Clauses, Iteration Clauses, Loop Examples, Loop Facility
2387@subsection For Clauses
2388
2389@noindent
2390Most loops are governed by one or more @code{for} clauses.
2391A @code{for} clause simultaneously describes variables to be
2392bound, how those variables are to be stepped during the loop,
2393and usually an end condition based on those variables.
2394
2395The word @code{as} is a synonym for the word @code{for}. This
2396word is followed by a variable name, then a word like @code{from}
2397or @code{across} that describes the kind of iteration desired.
2398In Common Lisp, the phrase @code{being the} sometimes precedes
2399the type of iteration; in this package both @code{being} and
2400@code{the} are optional. The word @code{each} is a synonym
2401for @code{the}, and the word that follows it may be singular
2402or plural: @samp{for x being the elements of y} or
2403@samp{for x being each element of y}. Which form you use
2404is purely a matter of style.
2405
2406The variable is bound around the loop as if by @code{let}:
2407
2408@example
2409(setq i 'happy)
2410(loop for i from 1 to 10 do (do-something-with i))
2411i
2412 @result{} happy
2413@end example
2414
2415@table @code
2416@item for @var{var} from @var{expr1} to @var{expr2} by @var{expr3}
2417This type of @code{for} clause creates a counting loop. Each of
2418the three sub-terms is optional, though there must be at least one
2419term so that the clause is marked as a counting clause.
2420
2421The three expressions are the starting value, the ending value, and
2422the step value, respectively, of the variable. The loop counts
2423upwards by default (@var{expr3} must be positive), from @var{expr1}
2424to @var{expr2} inclusively. If you omit the @code{from} term, the
2425loop counts from zero; if you omit the @code{to} term, the loop
2426counts forever without stopping (unless stopped by some other
2427loop clause, of course); if you omit the @code{by} term, the loop
2428counts in steps of one.
2429
2430You can replace the word @code{from} with @code{upfrom} or
2431@code{downfrom} to indicate the direction of the loop. Likewise,
2432you can replace @code{to} with @code{upto} or @code{downto}.
2433For example, @samp{for x from 5 downto 1} executes five times
2434with @code{x} taking on the integers from 5 down to 1 in turn.
2435Also, you can replace @code{to} with @code{below} or @code{above},
2436which are like @code{upto} and @code{downto} respectively except
2437that they are exclusive rather than inclusive limits:
2438
2439@example
2440(loop for x to 10 collect x)
2441 @result{} (0 1 2 3 4 5 6 7 8 9 10)
2442(loop for x below 10 collect x)
2443 @result{} (0 1 2 3 4 5 6 7 8 9)
2444@end example
2445
2446The @code{by} value is always positive, even for downward-counting
2447loops. Some sort of @code{from} value is required for downward
2448loops; @samp{for x downto 5} is not a legal loop clause all by
2449itself.
2450
2451@item for @var{var} in @var{list} by @var{function}
2452This clause iterates @var{var} over all the elements of @var{list},
2453in turn. If you specify the @code{by} term, then @var{function}
2454is used to traverse the list instead of @code{cdr}; it must be a
2455function taking one argument. For example:
2456
2457@example
2458(loop for x in '(1 2 3 4 5 6) collect (* x x))
2459 @result{} (1 4 9 16 25 36)
2460(loop for x in '(1 2 3 4 5 6) by 'cddr collect (* x x))
2461 @result{} (1 9 25)
2462@end example
2463
2464@item for @var{var} on @var{list} by @var{function}
2465This clause iterates @var{var} over all the cons cells of @var{list}.
2466
2467@example
2468(loop for x on '(1 2 3 4) collect x)
2469 @result{} ((1 2 3 4) (2 3 4) (3 4) (4))
2470@end example
2471
2472With @code{by}, there is no real reason that the @code{on} expression
2473must be a list. For example:
2474
2475@example
2476(loop for x on first-animal by 'next-animal collect x)
2477@end example
2478
2479@noindent
2480where @code{(next-animal x)} takes an ``animal'' @var{x} and returns
2481the next in the (assumed) sequence of animals, or @code{nil} if
2482@var{x} was the last animal in the sequence.
2483
2484@item for @var{var} in-ref @var{list} by @var{function}
2485This is like a regular @code{in} clause, but @var{var} becomes
2486a @code{setf}-able ``reference'' onto the elements of the list
2487rather than just a temporary variable. For example,
2488
2489@example
2490(loop for x in-ref my-list do (incf x))
2491@end example
2492
2493@noindent
2494increments every element of @code{my-list} in place. This clause
2495is an extension to standard Common Lisp.
2496
2497@item for @var{var} across @var{array}
2498This clause iterates @var{var} over all the elements of @var{array},
2499which may be a vector or a string.
2500
2501@example
2502(loop for x across "aeiou"
2503 do (use-vowel (char-to-string x)))
2504@end example
2505
2506@item for @var{var} across-ref @var{array}
2507This clause iterates over an array, with @var{var} a @code{setf}-able
2508reference onto the elements; see @code{in-ref} above.
2509
2510@item for @var{var} being the elements of @var{sequence}
2511This clause iterates over the elements of @var{sequence}, which may
2512be a list, vector, or string. Since the type must be determined
2513at run-time, this is somewhat less efficient than @code{in} or
2514@code{across}. The clause may be followed by the additional term
2515@samp{using (index @var{var2})} to cause @var{var2} to be bound to
2516the successive indices (starting at 0) of the elements.
2517
2518This clause type is taken from older versions of the @code{loop} macro,
2519and is not present in modern Common Lisp. The @samp{using (sequence ...)}
2520term of the older macros is not supported.
2521
2522@item for @var{var} being the elements of-ref @var{sequence}
2523This clause iterates over a sequence, with @var{var} a @code{setf}-able
2524reference onto the elements; see @code{in-ref} above.
2525
2526@item for @var{var} being the symbols [of @var{obarray}]
2527This clause iterates over symbols, either over all interned symbols
2528or over all symbols in @var{obarray}. The loop is executed with
2529@var{var} bound to each symbol in turn. The symbols are visited in
2530an unspecified order.
2531
2532As an example,
2533
2534@example
2535(loop for sym being the symbols
2536 when (fboundp sym)
2537 when (string-match "^map" (symbol-name sym))
2538 collect sym)
2539@end example
2540
2541@noindent
2542returns a list of all the functions whose names begin with @samp{map}.
2543
2544The Common Lisp words @code{external-symbols} and @code{present-symbols}
2545are also recognized but are equivalent to @code{symbols} in Emacs Lisp.
2546
2547Due to a minor implementation restriction, it will not work to have
2548more than one @code{for} clause iterating over symbols, hash tables,
2549keymaps, overlays, or intervals in a given @code{loop}. Fortunately,
2550it would rarely if ever be useful to do so. It @emph{is} legal to mix
2551one of these types of clauses with other clauses like @code{for ... to}
2552or @code{while}.
2553
2554@item for @var{var} being the hash-keys of @var{hash-table}
2555This clause iterates over the entries in @var{hash-table}. For each
2556hash table entry, @var{var} is bound to the entry's key. If you write
2557@samp{the hash-values} instead, @var{var} is bound to the values
2558of the entries. The clause may be followed by the additional
2559term @samp{using (hash-values @var{var2})} (where @code{hash-values}
2560is the opposite word of the word following @code{the}) to cause
2561@var{var} and @var{var2} to be bound to the two parts of each
2562hash table entry.
2563
2564@item for @var{var} being the key-codes of @var{keymap}
2565This clause iterates over the entries in @var{keymap}. In GNU Emacs
256618 and 19, keymaps are either alists or vectors, and key-codes are
2567integers or symbols. In Lucid Emacs 19, keymaps are a special new
2568data type, and key-codes are symbols or lists of symbols. The
2569iteration does not enter nested keymaps or inherited (parent) keymaps.
2570You can use @samp{the key-bindings} to access the commands bound to
2571the keys rather than the key codes, and you can add a @code{using}
2572clause to access both the codes and the bindings together.
2573
2574@item for @var{var} being the key-seqs of @var{keymap}
2575This clause iterates over all key sequences defined by @var{keymap}
2576and its nested keymaps, where @var{var} takes on values which are
ed4d9494 2577vectors. The strings or vectors
6bf7aab6
DL
2578are reused for each iteration, so you must copy them if you wish to keep
2579them permanently. You can add a @samp{using (key-bindings ...)}
2580clause to get the command bindings as well.
2581
2582@item for @var{var} being the overlays [of @var{buffer}] @dots{}
2583This clause iterates over the Emacs 19 ``overlays'' or Lucid
2584Emacs ``extents'' of a buffer (the clause @code{extents} is synonymous
ed4d9494
DL
2585with @code{overlays}). If the @code{of} term is omitted, the current
2586buffer is used.
6bf7aab6
DL
2587This clause also accepts optional @samp{from @var{pos}} and
2588@samp{to @var{pos}} terms, limiting the clause to overlays which
2589overlap the specified region.
2590
2591@item for @var{var} being the intervals [of @var{buffer}] @dots{}
2592This clause iterates over all intervals of a buffer with constant
2593text properties. The variable @var{var} will be bound to conses
2594of start and end positions, where one start position is always equal
2595to the previous end position. The clause allows @code{of},
2596@code{from}, @code{to}, and @code{property} terms, where the latter
2597term restricts the search to just the specified property. The
2598@code{of} term may specify either a buffer or a string. This
2599clause is useful only in GNU Emacs 19; in other versions, all
2600buffers and strings consist of a single interval.
2601
2602@item for @var{var} being the frames
2603This clause iterates over all frames, i.e., X window system windows
2604open on Emacs files. This clause works only under Emacs 19. The
2605clause @code{screens} is a synonym for @code{frames}. The frames
2606are visited in @code{next-frame} order starting from
2607@code{selected-frame}.
2608
2609@item for @var{var} being the windows [of @var{frame}]
2610This clause iterates over the windows (in the Emacs sense) of
ed4d9494 2611the current frame, or of the specified @var{frame}.
6bf7aab6
DL
2612
2613@item for @var{var} being the buffers
2614This clause iterates over all buffers in Emacs. It is equivalent
2615to @samp{for @var{var} in (buffer-list)}.
2616
2617@item for @var{var} = @var{expr1} then @var{expr2}
2618This clause does a general iteration. The first time through
2619the loop, @var{var} will be bound to @var{expr1}. On the second
2620and successive iterations it will be set by evaluating @var{expr2}
2621(which may refer to the old value of @var{var}). For example,
2622these two loops are effectively the same:
2623
2624@example
2625(loop for x on my-list by 'cddr do ...)
2626(loop for x = my-list then (cddr x) while x do ...)
2627@end example
2628
2629Note that this type of @code{for} clause does not imply any sort
2630of terminating condition; the above example combines it with a
2631@code{while} clause to tell when to end the loop.
2632
2633If you omit the @code{then} term, @var{expr1} is used both for
2634the initial setting and for successive settings:
2635
2636@example
2637(loop for x = (random) when (> x 0) return x)
2638@end example
2639
2640@noindent
2641This loop keeps taking random numbers from the @code{(random)}
2642function until it gets a positive one, which it then returns.
2643@end table
2644
2645If you include several @code{for} clauses in a row, they are
2646treated sequentially (as if by @code{let*} and @code{setq}).
2647You can instead use the word @code{and} to link the clauses,
2648in which case they are processed in parallel (as if by @code{let}
2649and @code{psetq}).
2650
2651@example
2652(loop for x below 5 for y = nil then x collect (list x y))
2653 @result{} ((0 nil) (1 1) (2 2) (3 3) (4 4))
2654(loop for x below 5 and y = nil then x collect (list x y))
2655 @result{} ((0 nil) (1 0) (2 1) (3 2) (4 3))
2656@end example
2657
2658@noindent
2659In the first loop, @code{y} is set based on the value of @code{x}
2660that was just set by the previous clause; in the second loop,
2661@code{x} and @code{y} are set simultaneously so @code{y} is set
2662based on the value of @code{x} left over from the previous time
2663through the loop.
2664
2665Another feature of the @code{loop} macro is @dfn{destructuring},
2666similar in concept to the destructuring provided by @code{defmacro}.
2667The @var{var} part of any @code{for} clause can be given as a list
2668of variables instead of a single variable. The values produced
2669during loop execution must be lists; the values in the lists are
2670stored in the corresponding variables.
2671
2672@example
2673(loop for (x y) in '((2 3) (4 5) (6 7)) collect (+ x y))
2674 @result{} (5 9 13)
2675@end example
2676
2677In loop destructuring, if there are more values than variables
2678the trailing values are ignored, and if there are more variables
2679than values the trailing variables get the value @code{nil}.
2680If @code{nil} is used as a variable name, the corresponding
2681values are ignored. Destructuring may be nested, and dotted
2682lists of variables like @code{(x . y)} are allowed.
2683
2684@node Iteration Clauses, Accumulation Clauses, For Clauses, Loop Facility
2685@subsection Iteration Clauses
2686
2687@noindent
2688Aside from @code{for} clauses, there are several other loop clauses
2689that control the way the loop operates. They might be used by
2690themselves, or in conjunction with one or more @code{for} clauses.
2691
2692@table @code
2693@item repeat @var{integer}
2694This clause simply counts up to the specified number using an
2695internal temporary variable. The loops
2696
2697@example
2698(loop repeat n do ...)
2699(loop for temp to n do ...)
2700@end example
2701
2702@noindent
2703are identical except that the second one forces you to choose
2704a name for a variable you aren't actually going to use.
2705
2706@item while @var{condition}
2707This clause stops the loop when the specified condition (any Lisp
2708expression) becomes @code{nil}. For example, the following two
2709loops are equivalent, except for the implicit @code{nil} block
2710that surrounds the second one:
2711
2712@example
2713(while @var{cond} @var{forms}@dots{})
2714(loop while @var{cond} do @var{forms}@dots{})
2715@end example
2716
2717@item until @var{condition}
2718This clause stops the loop when the specified condition is true,
2719i.e., non-@code{nil}.
2720
2721@item always @var{condition}
2722This clause stops the loop when the specified condition is @code{nil}.
2723Unlike @code{while}, it stops the loop using @code{return nil} so that
2724the @code{finally} clauses are not executed. If all the conditions
2725were non-@code{nil}, the loop returns @code{t}:
2726
2727@example
2728(if (loop for size in size-list always (> size 10))
2729 (some-big-sizes)
2730 (no-big-sizes))
2731@end example
2732
2733@item never @var{condition}
2734This clause is like @code{always}, except that the loop returns
2735@code{t} if any conditions were false, or @code{nil} otherwise.
2736
2737@item thereis @var{condition}
2738This clause stops the loop when the specified form is non-@code{nil};
2739in this case, it returns that non-@code{nil} value. If all the
2740values were @code{nil}, the loop returns @code{nil}.
2741@end table
2742
2743@node Accumulation Clauses, Other Clauses, Iteration Clauses, Loop Facility
2744@subsection Accumulation Clauses
2745
2746@noindent
2747These clauses cause the loop to accumulate information about the
2748specified Lisp @var{form}. The accumulated result is returned
2749from the loop unless overridden, say, by a @code{return} clause.
2750
2751@table @code
2752@item collect @var{form}
2753This clause collects the values of @var{form} into a list. Several
2754examples of @code{collect} appear elsewhere in this manual.
2755
2756The word @code{collecting} is a synonym for @code{collect}, and
2757likewise for the other accumulation clauses.
2758
2759@item append @var{form}
2760This clause collects lists of values into a result list using
2761@code{append}.
2762
2763@item nconc @var{form}
2764This clause collects lists of values into a result list by
2765destructively modifying the lists rather than copying them.
2766
2767@item concat @var{form}
2768This clause concatenates the values of the specified @var{form}
2769into a string. (It and the following clause are extensions to
2770standard Common Lisp.)
2771
2772@item vconcat @var{form}
2773This clause concatenates the values of the specified @var{form}
2774into a vector.
2775
2776@item count @var{form}
2777This clause counts the number of times the specified @var{form}
2778evaluates to a non-@code{nil} value.
2779
2780@item sum @var{form}
2781This clause accumulates the sum of the values of the specified
2782@var{form}, which must evaluate to a number.
2783
2784@item maximize @var{form}
2785This clause accumulates the maximum value of the specified @var{form},
2786which must evaluate to a number. The return value is undefined if
2787@code{maximize} is executed zero times.
2788
2789@item minimize @var{form}
2790This clause accumulates the minimum value of the specified @var{form}.
2791@end table
2792
2793Accumulation clauses can be followed by @samp{into @var{var}} to
2794cause the data to be collected into variable @var{var} (which is
2795automatically @code{let}-bound during the loop) rather than an
2796unnamed temporary variable. Also, @code{into} accumulations do
2797not automatically imply a return value. The loop must use some
2798explicit mechanism, such as @code{finally return}, to return
2799the accumulated result.
2800
2801It is legal for several accumulation clauses of the same type to
2802accumulate into the same place. From Steele:
2803
2804@example
2805(loop for name in '(fred sue alice joe june)
2806 for kids in '((bob ken) () () (kris sunshine) ())
2807 collect name
2808 append kids)
2809 @result{} (fred bob ken sue alice joe kris sunshine june)
2810@end example
2811
2812@node Other Clauses, , Accumulation Clauses, Loop Facility
2813@subsection Other Clauses
2814
2815@noindent
2816This section describes the remaining loop clauses.
2817
2818@table @code
2819@item with @var{var} = @var{value}
2820This clause binds a variable to a value around the loop, but
2821otherwise leaves the variable alone during the loop. The following
2822loops are basically equivalent:
2823
2824@example
2825(loop with x = 17 do ...)
2826(let ((x 17)) (loop do ...))
2827(loop for x = 17 then x do ...)
2828@end example
2829
2830Naturally, the variable @var{var} might be used for some purpose
2831in the rest of the loop. For example:
2832
2833@example
2834(loop for x in my-list with res = nil do (push x res)
2835 finally return res)
2836@end example
2837
2838This loop inserts the elements of @code{my-list} at the front of
2839a new list being accumulated in @code{res}, then returns the
2840list @code{res} at the end of the loop. The effect is similar
2841to that of a @code{collect} clause, but the list gets reversed
2842by virtue of the fact that elements are being pushed onto the
2843front of @code{res} rather than the end.
2844
2845If you omit the @code{=} term, the variable is initialized to
2846@code{nil}. (Thus the @samp{= nil} in the above example is
2847unnecessary.)
2848
2849Bindings made by @code{with} are sequential by default, as if
2850by @code{let*}. Just like @code{for} clauses, @code{with} clauses
2851can be linked with @code{and} to cause the bindings to be made by
2852@code{let} instead.
2853
2854@item if @var{condition} @var{clause}
2855This clause executes the following loop clause only if the specified
2856condition is true. The following @var{clause} should be an accumulation,
2857@code{do}, @code{return}, @code{if}, or @code{unless} clause.
2858Several clauses may be linked by separating them with @code{and}.
2859These clauses may be followed by @code{else} and a clause or clauses
2860to execute if the condition was false. The whole construct may
2861optionally be followed by the word @code{end} (which may be used to
2862disambiguate an @code{else} or @code{and} in a nested @code{if}).
2863
2864The actual non-@code{nil} value of the condition form is available
2865by the name @code{it} in the ``then'' part. For example:
2866
2867@example
2868(setq funny-numbers '(6 13 -1))
2869 @result{} (6 13 -1)
2870(loop for x below 10
2871 if (oddp x)
2872 collect x into odds
2873 and if (memq x funny-numbers) return (cdr it) end
2874 else
2875 collect x into evens
2876 finally return (vector odds evens))
2877 @result{} [(1 3 5 7 9) (0 2 4 6 8)]
2878(setq funny-numbers '(6 7 13 -1))
2879 @result{} (6 7 13 -1)
2880(loop <@r{same thing again}>)
2881 @result{} (13 -1)
2882@end example
2883
2884Note the use of @code{and} to put two clauses into the ``then''
2885part, one of which is itself an @code{if} clause. Note also that
2886@code{end}, while normally optional, was necessary here to make
2887it clear that the @code{else} refers to the outermost @code{if}
2888clause. In the first case, the loop returns a vector of lists
2889of the odd and even values of @var{x}. In the second case, the
2890odd number 7 is one of the @code{funny-numbers} so the loop
2891returns early; the actual returned value is based on the result
2892of the @code{memq} call.
2893
2894@item when @var{condition} @var{clause}
2895This clause is just a synonym for @code{if}.
2896
2897@item unless @var{condition} @var{clause}
2898The @code{unless} clause is just like @code{if} except that the
2899sense of the condition is reversed.
2900
2901@item named @var{name}
2902This clause gives a name other than @code{nil} to the implicit
2903block surrounding the loop. The @var{name} is the symbol to be
2904used as the block name.
2905
2906@item initially [do] @var{forms}...
2907This keyword introduces one or more Lisp forms which will be
2908executed before the loop itself begins (but after any variables
2909requested by @code{for} or @code{with} have been bound to their
2910initial values). @code{initially} clauses can appear anywhere;
2911if there are several, they are executed in the order they appear
2912in the loop. The keyword @code{do} is optional.
2913
2914@item finally [do] @var{forms}...
2915This introduces Lisp forms which will be executed after the loop
2916finishes (say, on request of a @code{for} or @code{while}).
2917@code{initially} and @code{finally} clauses may appear anywhere
2918in the loop construct, but they are executed (in the specified
2919order) at the beginning or end, respectively, of the loop.
2920
2921@item finally return @var{form}
2922This says that @var{form} should be executed after the loop
2923is done to obtain a return value. (Without this, or some other
2924clause like @code{collect} or @code{return}, the loop will simply
2925return @code{nil}.) Variables bound by @code{for}, @code{with},
2926or @code{into} will still contain their final values when @var{form}
2927is executed.
2928
2929@item do @var{forms}...
2930The word @code{do} may be followed by any number of Lisp expressions
2931which are executed as an implicit @code{progn} in the body of the
2932loop. Many of the examples in this section illustrate the use of
2933@code{do}.
2934
2935@item return @var{form}
2936This clause causes the loop to return immediately. The following
2937Lisp form is evaluated to give the return value of the @code{loop}
2938form. The @code{finally} clauses, if any, are not executed.
2939Of course, @code{return} is generally used inside an @code{if} or
2940@code{unless}, as its use in a top-level loop clause would mean
2941the loop would never get to ``loop'' more than once.
2942
2943The clause @samp{return @var{form}} is equivalent to
2944@samp{do (return @var{form})} (or @code{return-from} if the loop
2945was named). The @code{return} clause is implemented a bit more
2946efficiently, though.
2947@end table
2948
2949While there is no high-level way to add user extensions to @code{loop}
2950(comparable to @code{defsetf} for @code{setf}, say), this package
2951does offer two properties called @code{cl-loop-handler} and
2952@code{cl-loop-for-handler} which are functions to be called when
2953a given symbol is encountered as a top-level loop clause or
2954@code{for} clause, respectively. Consult the source code in
2955file @file{cl-macs.el} for details.
2956
2957This package's @code{loop} macro is compatible with that of Common
2958Lisp, except that a few features are not implemented: @code{loop-finish}
2959and data-type specifiers. Naturally, the @code{for} clauses which
2960iterate over keymaps, overlays, intervals, frames, windows, and
2961buffers are Emacs-specific extensions.
2962
2963@node Multiple Values, , Loop Facility, Control Structure
2964@section Multiple Values
2965
2966@noindent
2967Common Lisp functions can return zero or more results. Emacs Lisp
2968functions, by contrast, always return exactly one result. This
2969package makes no attempt to emulate Common Lisp multiple return
2970values; Emacs versions of Common Lisp functions that return more
2971than one value either return just the first value (as in
2972@code{compiler-macroexpand}) or return a list of values (as in
2973@code{get-setf-method}). This package @emph{does} define placeholders
2974for the Common Lisp functions that work with multiple values, but
2975in Emacs Lisp these functions simply operate on lists instead.
2976The @code{values} form, for example, is a synonym for @code{list}
2977in Emacs.
2978
2979@defspec multiple-value-bind (var@dots{}) values-form forms@dots{}
2980This form evaluates @var{values-form}, which must return a list of
2981values. It then binds the @var{var}s to these respective values,
2982as if by @code{let}, and then executes the body @var{forms}.
2983If there are more @var{var}s than values, the extra @var{var}s
2984are bound to @code{nil}. If there are fewer @var{var}s than
2985values, the excess values are ignored.
2986@end defspec
2987
2988@defspec multiple-value-setq (var@dots{}) form
2989This form evaluates @var{form}, which must return a list of values.
2990It then sets the @var{var}s to these respective values, as if by
2991@code{setq}. Extra @var{var}s or values are treated the same as
2992in @code{multiple-value-bind}.
2993@end defspec
2994
2995The older Quiroz package attempted a more faithful (but still
2996imperfect) emulation of Common Lisp multiple values. The old
2997method ``usually'' simulated true multiple values quite well,
2998but under certain circumstances would leave spurious return
2999values in memory where a later, unrelated @code{multiple-value-bind}
3000form would see them.
3001
3002Since a perfect emulation is not feasible in Emacs Lisp, this
3003package opts to keep it as simple and predictable as possible.
3004
3005@node Macros, Declarations, Control Structure, Top
3006@chapter Macros
3007
3008@noindent
3009This package implements the various Common Lisp features of
3010@code{defmacro}, such as destructuring, @code{&environment},
3011and @code{&body}. Top-level @code{&whole} is not implemented
3012for @code{defmacro} due to technical difficulties.
3013@xref{Argument Lists}.
3014
3015Destructuring is made available to the user by way of the
3016following macro:
3017
3018@defspec destructuring-bind arglist expr forms@dots{}
3019This macro expands to code which executes @var{forms}, with
3020the variables in @var{arglist} bound to the list of values
3021returned by @var{expr}. The @var{arglist} can include all
3022the features allowed for @code{defmacro} argument lists,
3023including destructuring. (The @code{&environment} keyword
3024is not allowed.) The macro expansion will signal an error
3025if @var{expr} returns a list of the wrong number of arguments
3026or with incorrect keyword arguments.
3027@end defspec
3028
3029This package also includes the Common Lisp @code{define-compiler-macro}
3030facility, which allows you to define compile-time expansions and
3031optimizations for your functions.
3032
3033@defspec define-compiler-macro name arglist forms@dots{}
3034This form is similar to @code{defmacro}, except that it only expands
3035calls to @var{name} at compile-time; calls processed by the Lisp
3036interpreter are not expanded, nor are they expanded by the
3037@code{macroexpand} function.
3038
3039The argument list may begin with a @code{&whole} keyword and a
3040variable. This variable is bound to the macro-call form itself,
3041i.e., to a list of the form @samp{(@var{name} @var{args}@dots{})}.
3042If the macro expander returns this form unchanged, then the
3043compiler treats it as a normal function call. This allows
3044compiler macros to work as optimizers for special cases of a
3045function, leaving complicated cases alone.
3046
3047For example, here is a simplified version of a definition that
3048appears as a standard part of this package:
3049
3050@example
3051(define-compiler-macro member* (&whole form a list &rest keys)
3052 (if (and (null keys)
3053 (eq (car-safe a) 'quote)
3054 (not (floatp-safe (cadr a))))
3055 (list 'memq a list)
3056 form))
3057@end example
3058
3059@noindent
3060This definition causes @code{(member* @var{a} @var{list})} to change
3061to a call to the faster @code{memq} in the common case where @var{a}
3062is a non-floating-point constant; if @var{a} is anything else, or
3063if there are any keyword arguments in the call, then the original
3064@code{member*} call is left intact. (The actual compiler macro
3065for @code{member*} optimizes a number of other cases, including
3066common @code{:test} predicates.)
3067@end defspec
3068
3069@defun compiler-macroexpand form
3070This function is analogous to @code{macroexpand}, except that it
3071expands compiler macros rather than regular macros. It returns
3072@var{form} unchanged if it is not a call to a function for which
3073a compiler macro has been defined, or if that compiler macro
3074decided to punt by returning its @code{&whole} argument. Like
3075@code{macroexpand}, it expands repeatedly until it reaches a form
3076for which no further expansion is possible.
3077@end defun
3078
3079@xref{Macro Bindings}, for descriptions of the @code{macrolet}
3080and @code{symbol-macrolet} forms for making ``local'' macro
3081definitions.
3082
3083@node Declarations, Symbols, Macros, Top
3084@chapter Declarations
3085
3086@noindent
3087Common Lisp includes a complex and powerful ``declaration''
3088mechanism that allows you to give the compiler special hints
3089about the types of data that will be stored in particular variables,
3090and about the ways those variables and functions will be used. This
3091package defines versions of all the Common Lisp declaration forms:
3092@code{declare}, @code{locally}, @code{proclaim}, @code{declaim},
3093and @code{the}.
3094
3095Most of the Common Lisp declarations are not currently useful in
3096Emacs Lisp, as the byte-code system provides little opportunity
3097to benefit from type information, and @code{special} declarations
3098are redundant in a fully dynamically-scoped Lisp. A few
3099declarations are meaningful when the optimizing Emacs 19 byte
3100compiler is being used, however. Under the earlier non-optimizing
3101compiler, these declarations will effectively be ignored.
3102
3103@defun proclaim decl-spec
3104This function records a ``global'' declaration specified by
3105@var{decl-spec}. Since @code{proclaim} is a function, @var{decl-spec}
3106is evaluated and thus should normally be quoted.
3107@end defun
3108
3109@defspec declaim decl-specs@dots{}
3110This macro is like @code{proclaim}, except that it takes any number
3111of @var{decl-spec} arguments, and the arguments are unevaluated and
3112unquoted. The @code{declaim} macro also puts an @code{(eval-when
3113(compile load eval) ...)} around the declarations so that they will
3114be registered at compile-time as well as at run-time. (This is vital,
3115since normally the declarations are meant to influence the way the
3116compiler treats the rest of the file that contains the @code{declaim}
3117form.)
3118@end defspec
3119
3120@defspec declare decl-specs@dots{}
3121This macro is used to make declarations within functions and other
3122code. Common Lisp allows declarations in various locations, generally
3123at the beginning of any of the many ``implicit @code{progn}s''
3124throughout Lisp syntax, such as function bodies, @code{let} bodies,
3125etc. Currently the only declaration understood by @code{declare}
3126is @code{special}.
3127@end defspec
3128
3129@defspec locally declarations@dots{} forms@dots{}
3130In this package, @code{locally} is no different from @code{progn}.
3131@end defspec
3132
3133@defspec the type form
3134Type information provided by @code{the} is ignored in this package;
3135in other words, @code{(the @var{type} @var{form})} is equivalent
3136to @var{form}. Future versions of the optimizing byte-compiler may
3137make use of this information.
3138
3139For example, @code{mapcar} can map over both lists and arrays. It is
3140hard for the compiler to expand @code{mapcar} into an in-line loop
3141unless it knows whether the sequence will be a list or an array ahead
3142of time. With @code{(mapcar 'car (the vector foo))}, a future
3143compiler would have enough information to expand the loop in-line.
3144For now, Emacs Lisp will treat the above code as exactly equivalent
3145to @code{(mapcar 'car foo)}.
3146@end defspec
3147
3148Each @var{decl-spec} in a @code{proclaim}, @code{declaim}, or
3149@code{declare} should be a list beginning with a symbol that says
3150what kind of declaration it is. This package currently understands
3151@code{special}, @code{inline}, @code{notinline}, @code{optimize},
3152and @code{warn} declarations. (The @code{warn} declaration is an
3153extension of standard Common Lisp.) Other Common Lisp declarations,
3154such as @code{type} and @code{ftype}, are silently ignored.
3155
3156@table @code
3157@item special
3158Since all variables in Emacs Lisp are ``special'' (in the Common
3159Lisp sense), @code{special} declarations are only advisory. They
3160simply tell the optimizing byte compiler that the specified
3161variables are intentionally being referred to without being
3162bound in the body of the function. The compiler normally emits
3163warnings for such references, since they could be typographical
3164errors for references to local variables.
3165
3166The declaration @code{(declare (special @var{var1} @var{var2}))} is
3167equivalent to @code{(defvar @var{var1}) (defvar @var{var2})} in the
3168optimizing compiler, or to nothing at all in older compilers (which
3169do not warn for non-local references).
3170
3171In top-level contexts, it is generally better to write
3172@code{(defvar @var{var})} than @code{(declaim (special @var{var}))},
3173since @code{defvar} makes your intentions clearer. But the older
3174byte compilers can not handle @code{defvar}s appearing inside of
3175functions, while @code{(declare (special @var{var}))} takes care
3176to work correctly with all compilers.
3177
3178@item inline
3179The @code{inline} @var{decl-spec} lists one or more functions
3180whose bodies should be expanded ``in-line'' into calling functions
3181whenever the compiler is able to arrange for it. For example,
3182the Common Lisp function @code{cadr} is declared @code{inline}
3183by this package so that the form @code{(cadr @var{x})} will
3184expand directly into @code{(car (cdr @var{x}))} when it is called
3185in user functions, for a savings of one (relatively expensive)
3186function call.
3187
3188The following declarations are all equivalent. Note that the
3189@code{defsubst} form is a convenient way to define a function
3190and declare it inline all at once, but it is available only in
3191Emacs 19.
3192
3193@example
3194(declaim (inline foo bar))
3195(eval-when (compile load eval) (proclaim '(inline foo bar)))
3196(proclaim-inline foo bar) ; Lucid Emacs only
3197(defsubst foo (...) ...) ; instead of defun; Emacs 19 only
3198@end example
3199
3200@strong{Note:} This declaration remains in effect after the
3201containing source file is done. It is correct to use it to
3202request that a function you have defined should be inlined,
3203but it is impolite to use it to request inlining of an external
3204function.
3205
3206In Common Lisp, it is possible to use @code{(declare (inline @dots{}))}
3207before a particular call to a function to cause just that call to
3208be inlined; the current byte compilers provide no way to implement
3209this, so @code{(declare (inline @dots{}))} is currently ignored by
3210this package.
3211
3212@item notinline
3213The @code{notinline} declaration lists functions which should
3214not be inlined after all; it cancels a previous @code{inline}
3215declaration.
3216
3217@item optimize
3218This declaration controls how much optimization is performed by
3219the compiler. Naturally, it is ignored by the earlier non-optimizing
3220compilers.
3221
3222The word @code{optimize} is followed by any number of lists like
3223@code{(speed 3)} or @code{(safety 2)}. Common Lisp defines several
3224optimization ``qualities''; this package ignores all but @code{speed}
3225and @code{safety}. The value of a quality should be an integer from
32260 to 3, with 0 meaning ``unimportant'' and 3 meaning ``very important.''
3227The default level for both qualities is 1.
3228
3229In this package, with the Emacs 19 optimizing compiler, the
3230@code{speed} quality is tied to the @code{byte-compile-optimize}
3231flag, which is set to @code{nil} for @code{(speed 0)} and to
3232@code{t} for higher settings; and the @code{safety} quality is
3233tied to the @code{byte-compile-delete-errors} flag, which is
3234set to @code{t} for @code{(safety 3)} and to @code{nil} for all
3235lower settings. (The latter flag controls whether the compiler
3236is allowed to optimize out code whose only side-effect could
3237be to signal an error, e.g., rewriting @code{(progn foo bar)} to
3238@code{bar} when it is not known whether @code{foo} will be bound
3239at run-time.)
3240
3241Note that even compiling with @code{(safety 0)}, the Emacs
3242byte-code system provides sufficient checking to prevent real
3243harm from being done. For example, barring serious bugs in
3244Emacs itself, Emacs will not crash with a segmentation fault
3245just because of an error in a fully-optimized Lisp program.
3246
3247The @code{optimize} declaration is normally used in a top-level
3248@code{proclaim} or @code{declaim} in a file; Common Lisp allows
3249it to be used with @code{declare} to set the level of optimization
3250locally for a given form, but this will not work correctly with the
3251current version of the optimizing compiler. (The @code{declare}
3252will set the new optimization level, but that level will not
3253automatically be unset after the enclosing form is done.)
3254
3255@item warn
3256This declaration controls what sorts of warnings are generated
3257by the byte compiler. Again, only the optimizing compiler
3258generates warnings. The word @code{warn} is followed by any
3259number of ``warning qualities,'' similar in form to optimization
3260qualities. The currently supported warning types are
3261@code{redefine}, @code{callargs}, @code{unresolved}, and
3262@code{free-vars}; in the current system, a value of 0 will
3263disable these warnings and any higher value will enable them.
3264See the documentation for the optimizing byte compiler for details.
3265@end table
3266
3267@node Symbols, Numbers, Declarations, Top
3268@chapter Symbols
3269
3270@noindent
3271This package defines several symbol-related features that were
3272missing from Emacs Lisp.
3273
3274@menu
3275* Property Lists:: `get*', `remprop', `getf', `remf'
3276* Creating Symbols:: `gensym', `gentemp'
3277@end menu
3278
3279@node Property Lists, Creating Symbols, Symbols, Symbols
3280@section Property Lists
3281
3282@noindent
3283These functions augment the standard Emacs Lisp functions @code{get}
3284and @code{put} for operating on properties attached to symbols.
3285There are also functions for working with property lists as
3286first-class data structures not attached to particular symbols.
3287
3288@defun get* symbol property &optional default
3289This function is like @code{get}, except that if the property is
3290not found, the @var{default} argument provides the return value.
3291(The Emacs Lisp @code{get} function always uses @code{nil} as
3292the default; this package's @code{get*} is equivalent to Common
3293Lisp's @code{get}.)
3294
3295The @code{get*} function is @code{setf}-able; when used in this
3296fashion, the @var{default} argument is allowed but ignored.
3297@end defun
3298
3299@defun remprop symbol property
3300This function removes the entry for @var{property} from the property
3301list of @var{symbol}. It returns a true value if the property was
3302indeed found and removed, or @code{nil} if there was no such property.
3303(This function was probably omitted from Emacs originally because,
3304since @code{get} did not allow a @var{default}, it was very difficult
3305to distinguish between a missing property and a property whose value
3306was @code{nil}; thus, setting a property to @code{nil} was close
3307enough to @code{remprop} for most purposes.)
3308@end defun
3309
3310@defun getf place property &optional default
3311This function scans the list @var{place} as if it were a property
3312list, i.e., a list of alternating property names and values. If
3313an even-numbered element of @var{place} is found which is @code{eq}
3314to @var{property}, the following odd-numbered element is returned.
3315Otherwise, @var{default} is returned (or @code{nil} if no default
3316is given).
3317
3318In particular,
3319
3320@example
3321(get sym prop) @equiv{} (getf (symbol-plist sym) prop)
3322@end example
3323
3324It is legal to use @code{getf} as a @code{setf} place, in which case
3325its @var{place} argument must itself be a legal @code{setf} place.
3326The @var{default} argument, if any, is ignored in this context.
3327The effect is to change (via @code{setcar}) the value cell in the
3328list that corresponds to @var{property}, or to cons a new property-value
3329pair onto the list if the property is not yet present.
3330
3331@example
3332(put sym prop val) @equiv{} (setf (getf (symbol-plist sym) prop) val)
3333@end example
3334
3335The @code{get} and @code{get*} functions are also @code{setf}-able.
3336The fact that @code{default} is ignored can sometimes be useful:
3337
3338@example
3339(incf (get* 'foo 'usage-count 0))
3340@end example
3341
3342Here, symbol @code{foo}'s @code{usage-count} property is incremented
3343if it exists, or set to 1 (an incremented 0) otherwise.
3344
3345When not used as a @code{setf} form, @code{getf} is just a regular
3346function and its @var{place} argument can actually be any Lisp
3347expression.
3348@end defun
3349
3350@defspec remf place property
3351This macro removes the property-value pair for @var{property} from
3352the property list stored at @var{place}, which is any @code{setf}-able
3353place expression. It returns true if the property was found. Note
3354that if @var{property} happens to be first on the list, this will
3355effectively do a @code{(setf @var{place} (cddr @var{place}))},
3356whereas if it occurs later, this simply uses @code{setcdr} to splice
3357out the property and value cells.
3358@end defspec
3359
3360@iftex
3361@secno=2
3362@end iftex
3363
3364@node Creating Symbols, , Property Lists, Symbols
3365@section Creating Symbols
3366
3367@noindent
3368These functions create unique symbols, typically for use as
3369temporary variables.
3370
3371@defun gensym &optional x
3372This function creates a new, uninterned symbol (using @code{make-symbol})
3373with a unique name. (The name of an uninterned symbol is relevant
3374only if the symbol is printed.) By default, the name is generated
3375from an increasing sequence of numbers, @samp{G1000}, @samp{G1001},
3376@samp{G1002}, etc. If the optional argument @var{x} is a string, that
3377string is used as a prefix instead of @samp{G}. Uninterned symbols
3378are used in macro expansions for temporary variables, to ensure that
3379their names will not conflict with ``real'' variables in the user's
3380code.
3381@end defun
3382
3383@defvar *gensym-counter*
3384This variable holds the counter used to generate @code{gensym} names.
3385It is incremented after each use by @code{gensym}. In Common Lisp
3386this is initialized with 0, but this package initializes it with a
3387random (time-dependent) value to avoid trouble when two files that
3388each used @code{gensym} in their compilation are loaded together.
3389(Uninterned symbols become interned when the compiler writes them
3390out to a file and the Emacs loader loads them, so their names have to
3391be treated a bit more carefully than in Common Lisp where uninterned
3392symbols remain uninterned after loading.)
3393@end defvar
3394
3395@defun gentemp &optional x
3396This function is like @code{gensym}, except that it produces a new
3397@emph{interned} symbol. If the symbol that is generated already
3398exists, the function keeps incrementing the counter and trying
3399again until a new symbol is generated.
3400@end defun
3401
3402The Quiroz @file{cl.el} package also defined a @code{defkeyword}
3403form for creating self-quoting keyword symbols. This package
3404automatically creates all keywords that are called for by
3405@code{&key} argument specifiers, and discourages the use of
3406keywords as data unrelated to keyword arguments, so the
3407@code{defkeyword} form has been discontinued.
3408
3409@iftex
3410@chapno=11
3411@end iftex
3412
3413@node Numbers, Sequences, Symbols, Top
3414@chapter Numbers
3415
3416@noindent
3417This section defines a few simple Common Lisp operations on numbers
3418which were left out of Emacs Lisp.
3419
3420@menu
3421* Predicates on Numbers:: `plusp', `oddp', `floatp-safe', etc.
76162e12 3422* Numerical Functions:: `abs', `floor*', etc.
6bf7aab6
DL
3423* Random Numbers:: `random*', `make-random-state'
3424* Implementation Parameters:: `most-positive-fixnum', `most-positive-float'
3425@end menu
3426
3427@iftex
3428@secno=1
3429@end iftex
3430
3431@node Predicates on Numbers, Numerical Functions, Numbers, Numbers
3432@section Predicates on Numbers
3433
3434@noindent
3435These functions return @code{t} if the specified condition is
3436true of the numerical argument, or @code{nil} otherwise.
3437
3438@defun plusp number
3439This predicate tests whether @var{number} is positive. It is an
3440error if the argument is not a number.
3441@end defun
3442
3443@defun minusp number
3444This predicate tests whether @var{number} is negative. It is an
3445error if the argument is not a number.
3446@end defun
3447
3448@defun oddp integer
3449This predicate tests whether @var{integer} is odd. It is an
3450error if the argument is not an integer.
3451@end defun
3452
3453@defun evenp integer
3454This predicate tests whether @var{integer} is even. It is an
3455error if the argument is not an integer.
3456@end defun
3457
3458@defun floatp-safe object
3459This predicate tests whether @var{object} is a floating-point
3460number. On systems that support floating-point, this is equivalent
3461to @code{floatp}. On other systems, this always returns @code{nil}.
3462@end defun
3463
3464@iftex
3465@secno=3
3466@end iftex
3467
3468@node Numerical Functions, Random Numbers, Predicates on Numbers, Numbers
3469@section Numerical Functions
3470
3471@noindent
3472These functions perform various arithmetic operations on numbers.
3473
6bf7aab6
DL
3474@defun gcd &rest integers
3475This function returns the Greatest Common Divisor of the arguments.
3476For one argument, it returns the absolute value of that argument.
3477For zero arguments, it returns zero.
3478@end defun
3479
3480@defun lcm &rest integers
3481This function returns the Least Common Multiple of the arguments.
3482For one argument, it returns the absolute value of that argument.
3483For zero arguments, it returns one.
3484@end defun
3485
3486@defun isqrt integer
3487This function computes the ``integer square root'' of its integer
3488argument, i.e., the greatest integer less than or equal to the true
3489square root of the argument.
3490@end defun
3491
3492@defun floor* number &optional divisor
3493This function implements the Common Lisp @code{floor} function.
3494It is called @code{floor*} to avoid name conflicts with the
3495simpler @code{floor} function built-in to Emacs 19.
3496
3497With one argument, @code{floor*} returns a list of two numbers:
3498The argument rounded down (toward minus infinity) to an integer,
3499and the ``remainder'' which would have to be added back to the
3500first return value to yield the argument again. If the argument
3501is an integer @var{x}, the result is always the list @code{(@var{x} 0)}.
3502If the argument is an Emacs 19 floating-point number, the first
3503result is a Lisp integer and the second is a Lisp float between
35040 (inclusive) and 1 (exclusive).
3505
3506With two arguments, @code{floor*} divides @var{number} by
3507@var{divisor}, and returns the floor of the quotient and the
3508corresponding remainder as a list of two numbers. If
3509@code{(floor* @var{x} @var{y})} returns @code{(@var{q} @var{r})},
3510then @code{@var{q}*@var{y} + @var{r} = @var{x}}, with @var{r}
3511between 0 (inclusive) and @var{r} (exclusive). Also, note
3512that @code{(floor* @var{x})} is exactly equivalent to
3513@code{(floor* @var{x} 1)}.
3514
3515This function is entirely compatible with Common Lisp's @code{floor}
3516function, except that it returns the two results in a list since
3517Emacs Lisp does not support multiple-valued functions.
3518@end defun
3519
3520@defun ceiling* number &optional divisor
3521This function implements the Common Lisp @code{ceiling} function,
3522which is analogous to @code{floor} except that it rounds the
3523argument or quotient of the arguments up toward plus infinity.
3524The remainder will be between 0 and minus @var{r}.
3525@end defun
3526
3527@defun truncate* number &optional divisor
3528This function implements the Common Lisp @code{truncate} function,
3529which is analogous to @code{floor} except that it rounds the
3530argument or quotient of the arguments toward zero. Thus it is
3531equivalent to @code{floor*} if the argument or quotient is
3532positive, or to @code{ceiling*} otherwise. The remainder has
3533the same sign as @var{number}.
3534@end defun
3535
3536@defun round* number &optional divisor
3537This function implements the Common Lisp @code{round} function,
3538which is analogous to @code{floor} except that it rounds the
3539argument or quotient of the arguments to the nearest integer.
3540In the case of a tie (the argument or quotient is exactly
3541halfway between two integers), it rounds to the even integer.
3542@end defun
3543
3544@defun mod* number divisor
3545This function returns the same value as the second return value
3546of @code{floor}.
3547@end defun
3548
3549@defun rem* number divisor
3550This function returns the same value as the second return value
3551of @code{truncate}.
3552@end defun
3553
3554These definitions are compatible with those in the Quiroz
3555@file{cl.el} package, except that this package appends @samp{*}
3556to certain function names to avoid conflicts with existing
3557Emacs 19 functions, and that the mechanism for returning
3558multiple values is different.
3559
3560@iftex
3561@secno=8
3562@end iftex
3563
3564@node Random Numbers, Implementation Parameters, Numerical Functions, Numbers
3565@section Random Numbers
3566
3567@noindent
3568This package also provides an implementation of the Common Lisp
3569random number generator. It uses its own additive-congruential
3570algorithm, which is much more likely to give statistically clean
3571random numbers than the simple generators supplied by many
3572operating systems.
3573
3574@defun random* number &optional state
3575This function returns a random nonnegative number less than
3576@var{number}, and of the same type (either integer or floating-point).
3577The @var{state} argument should be a @code{random-state} object
3578which holds the state of the random number generator. The
3579function modifies this state object as a side effect. If
3580@var{state} is omitted, it defaults to the variable
3581@code{*random-state*}, which contains a pre-initialized
3582@code{random-state} object.
3583@end defun
3584
3585@defvar *random-state*
3586This variable contains the system ``default'' @code{random-state}
3587object, used for calls to @code{random*} that do not specify an
3588alternative state object. Since any number of programs in the
3589Emacs process may be accessing @code{*random-state*} in interleaved
3590fashion, the sequence generated from this variable will be
3591irreproducible for all intents and purposes.
3592@end defvar
3593
3594@defun make-random-state &optional state
3595This function creates or copies a @code{random-state} object.
3596If @var{state} is omitted or @code{nil}, it returns a new copy of
3597@code{*random-state*}. This is a copy in the sense that future
3598sequences of calls to @code{(random* @var{n})} and
3599@code{(random* @var{n} @var{s})} (where @var{s} is the new
3600random-state object) will return identical sequences of random
3601numbers.
3602
3603If @var{state} is a @code{random-state} object, this function
3604returns a copy of that object. If @var{state} is @code{t}, this
3605function returns a new @code{random-state} object seeded from the
3606date and time. As an extension to Common Lisp, @var{state} may also
3607be an integer in which case the new object is seeded from that
3608integer; each different integer seed will result in a completely
3609different sequence of random numbers.
3610
3611It is legal to print a @code{random-state} object to a buffer or
3612file and later read it back with @code{read}. If a program wishes
3613to use a sequence of pseudo-random numbers which can be reproduced
3614later for debugging, it can call @code{(make-random-state t)} to
3615get a new sequence, then print this sequence to a file. When the
3616program is later rerun, it can read the original run's random-state
3617from the file.
3618@end defun
3619
3620@defun random-state-p object
3621This predicate returns @code{t} if @var{object} is a
3622@code{random-state} object, or @code{nil} otherwise.
3623@end defun
3624
3625@node Implementation Parameters, , Random Numbers, Numbers
3626@section Implementation Parameters
3627
3628@noindent
3629This package defines several useful constants having to with numbers.
3630
3631@defvar most-positive-fixnum
3632This constant equals the largest value a Lisp integer can hold.
3633It is typically @code{2^23-1} or @code{2^25-1}.
3634@end defvar
3635
3636@defvar most-negative-fixnum
3637This constant equals the smallest (most negative) value a Lisp
3638integer can hold.
3639@end defvar
3640
3641The following parameters have to do with floating-point numbers.
3642This package determines their values by exercising the computer's
3643floating-point arithmetic in various ways. Because this operation
3644might be slow, the code for initializing them is kept in a separate
3645function that must be called before the parameters can be used.
3646
3647@defun cl-float-limits
3648This function makes sure that the Common Lisp floating-point
3649parameters like @code{most-positive-float} have been initialized.
3650Until it is called, these parameters will be @code{nil}. If this
3651version of Emacs does not support floats (e.g., most versions of
3652Emacs 18), the parameters will remain @code{nil}. If the parameters
3653have already been initialized, the function returns immediately.
3654
3655The algorithm makes assumptions that will be valid for most modern
3656machines, but will fail if the machine's arithmetic is extremely
3657unusual, e.g., decimal.
3658@end defun
3659
3660Since true Common Lisp supports up to four different floating-point
3661precisions, it has families of constants like
3662@code{most-positive-single-float}, @code{most-positive-double-float},
3663@code{most-positive-long-float}, and so on. Emacs has only one
3664floating-point precision, so this package omits the precision word
3665from the constants' names.
3666
3667@defvar most-positive-float
3668This constant equals the largest value a Lisp float can hold.
3669For those systems whose arithmetic supports infinities, this is
3670the largest @emph{finite} value. For IEEE machines, the value
3671is approximately @code{1.79e+308}.
3672@end defvar
3673
3674@defvar most-negative-float
3675This constant equals the most-negative value a Lisp float can hold.
3676(It is assumed to be equal to @code{(- most-positive-float)}.)
3677@end defvar
3678
3679@defvar least-positive-float
3680This constant equals the smallest Lisp float value greater than zero.
3681For IEEE machines, it is about @code{4.94e-324} if denormals are
3682supported or @code{2.22e-308} if not.
3683@end defvar
3684
3685@defvar least-positive-normalized-float
3686This constant equals the smallest @emph{normalized} Lisp float greater
3687than zero, i.e., the smallest value for which IEEE denormalization
3688will not result in a loss of precision. For IEEE machines, this
3689value is about @code{2.22e-308}. For machines that do not support
3690the concept of denormalization and gradual underflow, this constant
3691will always equal @code{least-positive-float}.
3692@end defvar
3693
3694@defvar least-negative-float
3695This constant is the negative counterpart of @code{least-positive-float}.
3696@end defvar
3697
3698@defvar least-negative-normalized-float
3699This constant is the negative counterpart of
3700@code{least-positive-normalized-float}.
3701@end defvar
3702
3703@defvar float-epsilon
3704This constant is the smallest positive Lisp float that can be added
3705to 1.0 to produce a distinct value. Adding a smaller number to 1.0
3706will yield 1.0 again due to roundoff. For IEEE machines, epsilon
3707is about @code{2.22e-16}.
3708@end defvar
3709
3710@defvar float-negative-epsilon
3711This is the smallest positive value that can be subtracted from
37121.0 to produce a distinct value. For IEEE machines, it is about
3713@code{1.11e-16}.
3714@end defvar
3715
3716@iftex
3717@chapno=13
3718@end iftex
3719
3720@node Sequences, Lists, Numbers, Top
3721@chapter Sequences
3722
3723@noindent
3724Common Lisp defines a number of functions that operate on
3725@dfn{sequences}, which are either lists, strings, or vectors.
3726Emacs Lisp includes a few of these, notably @code{elt} and
3727@code{length}; this package defines most of the rest.
3728
3729@menu
3730* Sequence Basics:: Arguments shared by all sequence functions
3731* Mapping over Sequences:: `mapcar*', `mapcan', `map', `every', etc.
3732* Sequence Functions:: `subseq', `remove*', `substitute', etc.
3733* Searching Sequences:: `find', `position', `count', `search', etc.
3734* Sorting Sequences:: `sort*', `stable-sort', `merge'
3735@end menu
3736
3737@node Sequence Basics, Mapping over Sequences, Sequences, Sequences
3738@section Sequence Basics
3739
3740@noindent
3741Many of the sequence functions take keyword arguments; @pxref{Argument
3742Lists}. All keyword arguments are optional and, if specified,
3743may appear in any order.
3744
3745The @code{:key} argument should be passed either @code{nil}, or a
3746function of one argument. This key function is used as a filter
3747through which the elements of the sequence are seen; for example,
3748@code{(find x y :key 'car)} is similar to @code{(assoc* x y)}:
3749It searches for an element of the list whose @code{car} equals
3750@code{x}, rather than for an element which equals @code{x} itself.
3751If @code{:key} is omitted or @code{nil}, the filter is effectively
3752the identity function.
3753
3754The @code{:test} and @code{:test-not} arguments should be either
3755@code{nil}, or functions of two arguments. The test function is
3756used to compare two sequence elements, or to compare a search value
3757with sequence elements. (The two values are passed to the test
3758function in the same order as the original sequence function
3759arguments from which they are derived, or, if they both come from
3760the same sequence, in the same order as they appear in that sequence.)
3761The @code{:test} argument specifies a function which must return
3762true (non-@code{nil}) to indicate a match; instead, you may use
3763@code{:test-not} to give a function which returns @emph{false} to
3764indicate a match. The default test function is @code{:test 'eql}.
3765
3766Many functions which take @var{item} and @code{:test} or @code{:test-not}
3767arguments also come in @code{-if} and @code{-if-not} varieties,
3768where a @var{predicate} function is passed instead of @var{item},
3769and sequence elements match if the predicate returns true on them
3770(or false in the case of @code{-if-not}). For example:
3771
3772@example
3773(remove* 0 seq :test '=) @equiv{} (remove-if 'zerop seq)
3774@end example
3775
3776@noindent
3777to remove all zeros from sequence @code{seq}.
3778
3779Some operations can work on a subsequence of the argument sequence;
3780these function take @code{:start} and @code{:end} arguments which
3781default to zero and the length of the sequence, respectively.
3782Only elements between @var{start} (inclusive) and @var{end}
3783(exclusive) are affected by the operation. The @var{end} argument
3784may be passed @code{nil} to signify the length of the sequence;
3785otherwise, both @var{start} and @var{end} must be integers, with
3786@code{0 <= @var{start} <= @var{end} <= (length @var{seq})}.
3787If the function takes two sequence arguments, the limits are
3788defined by keywords @code{:start1} and @code{:end1} for the first,
3789and @code{:start2} and @code{:end2} for the second.
3790
3791A few functions accept a @code{:from-end} argument, which, if
3792non-@code{nil}, causes the operation to go from right-to-left
3793through the sequence instead of left-to-right, and a @code{:count}
3794argument, which specifies an integer maximum number of elements
3795to be removed or otherwise processed.
3796
3797The sequence functions make no guarantees about the order in
3798which the @code{:test}, @code{:test-not}, and @code{:key} functions
3799are called on various elements. Therefore, it is a bad idea to depend
3800on side effects of these functions. For example, @code{:from-end}
3801may cause the sequence to be scanned actually in reverse, or it may
3802be scanned forwards but computing a result ``as if'' it were scanned
3803backwards. (Some functions, like @code{mapcar*} and @code{every},
3804@emph{do} specify exactly the order in which the function is called
3805so side effects are perfectly acceptable in those cases.)
3806
3807Strings in GNU Emacs 19 may contain ``text properties'' as well
3808as character data. Except as noted, it is undefined whether or
3809not text properties are preserved by sequence functions. For
3810example, @code{(remove* ?A @var{str})} may or may not preserve
3811the properties of the characters copied from @var{str} into the
3812result.
3813
3814@node Mapping over Sequences, Sequence Functions, Sequence Basics, Sequences
3815@section Mapping over Sequences
3816
3817@noindent
3818These functions ``map'' the function you specify over the elements
3819of lists or arrays. They are all variations on the theme of the
3820built-in function @code{mapcar}.
3821
3822@defun mapcar* function seq &rest more-seqs
3823This function calls @var{function} on successive parallel sets of
3824elements from its argument sequences. Given a single @var{seq}
3825argument it is equivalent to @code{mapcar}; given @var{n} sequences,
3826it calls the function with the first elements of each of the sequences
3827as the @var{n} arguments to yield the first element of the result
3828list, then with the second elements, and so on. The mapping stops as
3829soon as the shortest sequence runs out. The argument sequences may
3830be any mixture of lists, strings, and vectors; the return sequence
3831is always a list.
3832
3833Common Lisp's @code{mapcar} accepts multiple arguments but works
3834only on lists; Emacs Lisp's @code{mapcar} accepts a single sequence
3835argument. This package's @code{mapcar*} works as a compatible
3836superset of both.
3837@end defun
3838
3839@defun map result-type function seq &rest more-seqs
3840This function maps @var{function} over the argument sequences,
3841just like @code{mapcar*}, but it returns a sequence of type
3842@var{result-type} rather than a list. @var{result-type} must
3843be one of the following symbols: @code{vector}, @code{string},
3844@code{list} (in which case the effect is the same as for
3845@code{mapcar*}), or @code{nil} (in which case the results are
3846thrown away and @code{map} returns @code{nil}).
3847@end defun
3848
3849@defun maplist function list &rest more-lists
3850This function calls @var{function} on each of its argument lists,
3851then on the @code{cdr}s of those lists, and so on, until the
3852shortest list runs out. The results are returned in the form
3853of a list. Thus, @code{maplist} is like @code{mapcar*} except
3854that it passes in the list pointers themselves rather than the
3855@code{car}s of the advancing pointers.
3856@end defun
3857
3858@defun mapc function seq &rest more-seqs
3859This function is like @code{mapcar*}, except that the values
3860returned by @var{function} are ignored and thrown away rather
3861than being collected into a list. The return value of @code{mapc}
3862is @var{seq}, the first sequence.
3863@end defun
3864
3865@defun mapl function list &rest more-lists
3866This function is like @code{maplist}, except that it throws away
3867the values returned by @var{function}.
3868@end defun
3869
3870@defun mapcan function seq &rest more-seqs
3871This function is like @code{mapcar*}, except that it concatenates
3872the return values (which must be lists) using @code{nconc},
3873rather than simply collecting them into a list.
3874@end defun
3875
3876@defun mapcon function list &rest more-lists
3877This function is like @code{maplist}, except that it concatenates
3878the return values using @code{nconc}.
3879@end defun
3880
3881@defun some predicate seq &rest more-seqs
3882This function calls @var{predicate} on each element of @var{seq}
3883in turn; if @var{predicate} returns a non-@code{nil} value,
3884@code{some} returns that value, otherwise it returns @code{nil}.
3885Given several sequence arguments, it steps through the sequences
3886in parallel until the shortest one runs out, just as in
3887@code{mapcar*}. You can rely on the left-to-right order in which
3888the elements are visited, and on the fact that mapping stops
3889immediately as soon as @var{predicate} returns non-@code{nil}.
3890@end defun
3891
3892@defun every predicate seq &rest more-seqs
3893This function calls @var{predicate} on each element of the sequence(s)
3894in turn; it returns @code{nil} as soon as @var{predicate} returns
3895@code{nil} for any element, or @code{t} if the predicate was true
3896for all elements.
3897@end defun
3898
3899@defun notany predicate seq &rest more-seqs
3900This function calls @var{predicate} on each element of the sequence(s)
3901in turn; it returns @code{nil} as soon as @var{predicate} returns
3902a non-@code{nil} value for any element, or @code{t} if the predicate
3903was @code{nil} for all elements.
3904@end defun
3905
3906@defun notevery predicate seq &rest more-seqs
3907This function calls @var{predicate} on each element of the sequence(s)
3908in turn; it returns a non-@code{nil} value as soon as @var{predicate}
3909returns @code{nil} for any element, or @code{t} if the predicate was
3910true for all elements.
3911@end defun
3912
3913@defun reduce function seq @t{&key :from-end :start :end :initial-value :key}
3914This function combines the elements of @var{seq} using an associative
3915binary operation. Suppose @var{function} is @code{*} and @var{seq} is
3916the list @code{(2 3 4 5)}. The first two elements of the list are
3917combined with @code{(* 2 3) = 6}; this is combined with the next
3918element, @code{(* 6 4) = 24}, and that is combined with the final
3919element: @code{(* 24 5) = 120}. Note that the @code{*} function happens
3920to be self-reducing, so that @code{(* 2 3 4 5)} has the same effect as
3921an explicit call to @code{reduce}.
3922
3923If @code{:from-end} is true, the reduction is right-associative instead
3924of left-associative:
3925
3926@example
3927(reduce '- '(1 2 3 4))
3928 @equiv{} (- (- (- 1 2) 3) 4) @result{} -8
3929(reduce '- '(1 2 3 4) :from-end t)
3930 @equiv{} (- 1 (- 2 (- 3 4))) @result{} -2
3931@end example
3932
3933If @code{:key} is specified, it is a function of one argument which
3934is called on each of the sequence elements in turn.
3935
3936If @code{:initial-value} is specified, it is effectively added to the
3937front (or rear in the case of @code{:from-end}) of the sequence.
3938The @code{:key} function is @emph{not} applied to the initial value.
3939
3940If the sequence, including the initial value, has exactly one element
3941then that element is returned without ever calling @var{function}.
3942If the sequence is empty (and there is no initial value), then
3943@var{function} is called with no arguments to obtain the return value.
3944@end defun
3945
3946All of these mapping operations can be expressed conveniently in
3947terms of the @code{loop} macro. In compiled code, @code{loop} will
3948be faster since it generates the loop as in-line code with no
3949function calls.
3950
3951@node Sequence Functions, Searching Sequences, Mapping over Sequences, Sequences
3952@section Sequence Functions
3953
3954@noindent
3955This section describes a number of Common Lisp functions for
3956operating on sequences.
3957
3958@defun subseq sequence start &optional end
3959This function returns a given subsequence of the argument
3960@var{sequence}, which may be a list, string, or vector.
3961The indices @var{start} and @var{end} must be in range, and
3962@var{start} must be no greater than @var{end}. If @var{end}
3963is omitted, it defaults to the length of the sequence. The
3964return value is always a copy; it does not share structure
3965with @var{sequence}.
3966
3967As an extension to Common Lisp, @var{start} and/or @var{end}
3968may be negative, in which case they represent a distance back
3969from the end of the sequence. This is for compatibility with
3970Emacs' @code{substring} function. Note that @code{subseq} is
3971the @emph{only} sequence function that allows negative
3972@var{start} and @var{end}.
3973
3974You can use @code{setf} on a @code{subseq} form to replace a
3975specified range of elements with elements from another sequence.
3976The replacement is done as if by @code{replace}, described below.
3977@end defun
3978
3979@defun concatenate result-type &rest seqs
3980This function concatenates the argument sequences together to
3981form a result sequence of type @var{result-type}, one of the
3982symbols @code{vector}, @code{string}, or @code{list}. The
3983arguments are always copied, even in cases such as
3984@code{(concatenate 'list '(1 2 3))} where the result is
3985identical to an argument.
3986@end defun
3987
3988@defun fill seq item @t{&key :start :end}
3989This function fills the elements of the sequence (or the specified
3990part of the sequence) with the value @var{item}.
3991@end defun
3992
3993@defun replace seq1 seq2 @t{&key :start1 :end1 :start2 :end2}
3994This function copies part of @var{seq2} into part of @var{seq1}.
3995The sequence @var{seq1} is not stretched or resized; the amount
3996of data copied is simply the shorter of the source and destination
3997(sub)sequences. The function returns @var{seq1}.
3998
3999If @var{seq1} and @var{seq2} are @code{eq}, then the replacement
4000will work correctly even if the regions indicated by the start
4001and end arguments overlap. However, if @var{seq1} and @var{seq2}
4002are lists which share storage but are not @code{eq}, and the
4003start and end arguments specify overlapping regions, the effect
4004is undefined.
4005@end defun
4006
4007@defun remove* item seq @t{&key :test :test-not :key :count :start :end :from-end}
4008This returns a copy of @var{seq} with all elements matching
4009@var{item} removed. The result may share storage with or be
4010@code{eq} to @var{seq} in some circumstances, but the original
4011@var{seq} will not be modified. The @code{:test}, @code{:test-not},
4012and @code{:key} arguments define the matching test that is used;
4013by default, elements @code{eql} to @var{item} are removed. The
4014@code{:count} argument specifies the maximum number of matching
4015elements that can be removed (only the leftmost @var{count} matches
4016are removed). The @code{:start} and @code{:end} arguments specify
4017a region in @var{seq} in which elements will be removed; elements
4018outside that region are not matched or removed. The @code{:from-end}
4019argument, if true, says that elements should be deleted from the
4020end of the sequence rather than the beginning (this matters only
4021if @var{count} was also specified).
4022@end defun
4023
4024@defun delete* item seq @t{&key :test :test-not :key :count :start :end :from-end}
4025This deletes all elements of @var{seq} which match @var{item}.
4026It is a destructive operation. Since Emacs Lisp does not support
4027stretchable strings or vectors, this is the same as @code{remove*}
4028for those sequence types. On lists, @code{remove*} will copy the
4029list if necessary to preserve the original list, whereas
4030@code{delete*} will splice out parts of the argument list.
4031Compare @code{append} and @code{nconc}, which are analogous
4032non-destructive and destructive list operations in Emacs Lisp.
4033@end defun
4034
4035@findex remove-if
4036@findex remove-if-not
4037@findex delete-if
4038@findex delete-if-not
4039The predicate-oriented functions @code{remove-if}, @code{remove-if-not},
4040@code{delete-if}, and @code{delete-if-not} are defined similarly.
4041
6bf7aab6
DL
4042@defun remove item list
4043This function removes from @var{list} all elements which are
4044@code{equal} to @var{item}. This package defines it for symmetry
4045with @code{delete}, even though @code{remove} is not built-in to
4046Emacs 19.
4047@end defun
4048
4049@defun remq item list
4050This function removes from @var{list} all elements which are
4051@code{eq} to @var{item}. This package defines it for symmetry
4052with @code{delq}, even though @code{remq} is not built-in to
4053Emacs 19.
4054@end defun
4055
4056@defun remove-duplicates seq @t{&key :test :test-not :key :start :end :from-end}
4057This function returns a copy of @var{seq} with duplicate elements
4058removed. Specifically, if two elements from the sequence match
4059according to the @code{:test}, @code{:test-not}, and @code{:key}
4060arguments, only the rightmost one is retained. If @code{:from-end}
4061is true, the leftmost one is retained instead. If @code{:start} or
4062@code{:end} is specified, only elements within that subsequence are
4063examined or removed.
4064@end defun
4065
4066@defun delete-duplicates seq @t{&key :test :test-not :key :start :end :from-end}
4067This function deletes duplicate elements from @var{seq}. It is
4068a destructive version of @code{remove-duplicates}.
4069@end defun
4070
4071@defun substitute new old seq @t{&key :test :test-not :key :count :start :end :from-end}
4072This function returns a copy of @var{seq}, with all elements
4073matching @var{old} replaced with @var{new}. The @code{:count},
4074@code{:start}, @code{:end}, and @code{:from-end} arguments may be
4075used to limit the number of substitutions made.
4076@end defun
4077
4078@defun nsubstitute new old seq @t{&key :test :test-not :key :count :start :end :from-end}
4079This is a destructive version of @code{substitute}; it performs
4080the substitution using @code{setcar} or @code{aset} rather than
4081by returning a changed copy of the sequence.
4082@end defun
4083
4084@findex substitute-if
4085@findex substitute-if-not
4086@findex nsubstitute-if
4087@findex nsubstitute-if-not
4088The @code{substitute-if}, @code{substitute-if-not}, @code{nsubstitute-if},
4089and @code{nsubstitute-if-not} functions are defined similarly. For
4090these, a @var{predicate} is given in place of the @var{old} argument.
4091
4092@node Searching Sequences, Sorting Sequences, Sequence Functions, Sequences
4093@section Searching Sequences
4094
4095@noindent
4096These functions search for elements or subsequences in a sequence.
4097(See also @code{member*} and @code{assoc*}; @pxref{Lists}.)
4098
4099@defun find item seq @t{&key :test :test-not :key :start :end :from-end}
4100This function searches @var{seq} for an element matching @var{item}.
4101If it finds a match, it returns the matching element. Otherwise,
4102it returns @code{nil}. It returns the leftmost match, unless
4103@code{:from-end} is true, in which case it returns the rightmost
4104match. The @code{:start} and @code{:end} arguments may be used to
4105limit the range of elements that are searched.
4106@end defun
4107
4108@defun position item seq @t{&key :test :test-not :key :start :end :from-end}
4109This function is like @code{find}, except that it returns the
4110integer position in the sequence of the matching item rather than
4111the item itself. The position is relative to the start of the
4112sequence as a whole, even if @code{:start} is non-zero. The function
4113returns @code{nil} if no matching element was found.
4114@end defun
4115
4116@defun count item seq @t{&key :test :test-not :key :start :end}
4117This function returns the number of elements of @var{seq} which
4118match @var{item}. The result is always a nonnegative integer.
4119@end defun
4120
4121@findex find-if
4122@findex find-if-not
4123@findex position-if
4124@findex position-if-not
4125@findex count-if
4126@findex count-if-not
4127The @code{find-if}, @code{find-if-not}, @code{position-if},
4128@code{position-if-not}, @code{count-if}, and @code{count-if-not}
4129functions are defined similarly.
4130
4131@defun mismatch seq1 seq2 @t{&key :test :test-not :key :start1 :end1 :start2 :end2 :from-end}
4132This function compares the specified parts of @var{seq1} and
4133@var{seq2}. If they are the same length and the corresponding
4134elements match (according to @code{:test}, @code{:test-not},
4135and @code{:key}), the function returns @code{nil}. If there is
4136a mismatch, the function returns the index (relative to @var{seq1})
4137of the first mismatching element. This will be the leftmost pair of
4138elements which do not match, or the position at which the shorter of
4139the two otherwise-matching sequences runs out.
4140
4141If @code{:from-end} is true, then the elements are compared from right
4142to left starting at @code{(1- @var{end1})} and @code{(1- @var{end2})}.
4143If the sequences differ, then one plus the index of the rightmost
4144difference (relative to @var{seq1}) is returned.
4145
4146An interesting example is @code{(mismatch str1 str2 :key 'upcase)},
4147which compares two strings case-insensitively.
4148@end defun
4149
4150@defun search seq1 seq2 @t{&key :test :test-not :key :from-end :start1 :end1 :start2 :end2}
4151This function searches @var{seq2} for a subsequence that matches
4152@var{seq1} (or part of it specified by @code{:start1} and
4153@code{:end1}.) Only matches which fall entirely within the region
4154defined by @code{:start2} and @code{:end2} will be considered.
4155The return value is the index of the leftmost element of the
4156leftmost match, relative to the start of @var{seq2}, or @code{nil}
4157if no matches were found. If @code{:from-end} is true, the
4158function finds the @emph{rightmost} matching subsequence.
4159@end defun
4160
4161@node Sorting Sequences, , Searching Sequences, Sequences
4162@section Sorting Sequences
4163
4164@defun sort* seq predicate @t{&key :key}
4165This function sorts @var{seq} into increasing order as determined
4166by using @var{predicate} to compare pairs of elements. @var{predicate}
4167should return true (non-@code{nil}) if and only if its first argument
4168is less than (not equal to) its second argument. For example,
4169@code{<} and @code{string-lessp} are suitable predicate functions
4170for sorting numbers and strings, respectively; @code{>} would sort
4171numbers into decreasing rather than increasing order.
4172
4173This function differs from Emacs' built-in @code{sort} in that it
4174can operate on any type of sequence, not just lists. Also, it
4175accepts a @code{:key} argument which is used to preprocess data
4176fed to the @var{predicate} function. For example,
4177
4178@example
4179(setq data (sort data 'string-lessp :key 'downcase))
4180@end example
4181
4182@noindent
4183sorts @var{data}, a sequence of strings, into increasing alphabetical
4184order without regard to case. A @code{:key} function of @code{car}
4185would be useful for sorting association lists.
4186
4187The @code{sort*} function is destructive; it sorts lists by actually
4188rearranging the @code{cdr} pointers in suitable fashion.
4189@end defun
4190
4191@defun stable-sort seq predicate @t{&key :key}
4192This function sorts @var{seq} @dfn{stably}, meaning two elements
4193which are equal in terms of @var{predicate} are guaranteed not to
4194be rearranged out of their original order by the sort.
4195
4196In practice, @code{sort*} and @code{stable-sort} are equivalent
4197in Emacs Lisp because the underlying @code{sort} function is
4198stable by default. However, this package reserves the right to
4199use non-stable methods for @code{sort*} in the future.
4200@end defun
4201
4202@defun merge type seq1 seq2 predicate @t{&key :key}
4203This function merges two sequences @var{seq1} and @var{seq2} by
4204interleaving their elements. The result sequence, of type @var{type}
4205(in the sense of @code{concatenate}), has length equal to the sum
4206of the lengths of the two input sequences. The sequences may be
4207modified destructively. Order of elements within @var{seq1} and
4208@var{seq2} is preserved in the interleaving; elements of the two
4209sequences are compared by @var{predicate} (in the sense of
4210@code{sort}) and the lesser element goes first in the result.
4211When elements are equal, those from @var{seq1} precede those from
4212@var{seq2} in the result. Thus, if @var{seq1} and @var{seq2} are
4213both sorted according to @var{predicate}, then the result will be
4214a merged sequence which is (stably) sorted according to
4215@var{predicate}.
4216@end defun
4217
4218@node Lists, Hash Tables, Sequences, Top
4219@chapter Lists
4220
4221@noindent
4222The functions described here operate on lists.
4223
4224@menu
4225* List Functions:: `caddr', `first', `last*', `list*', etc.
4226* Substitution of Expressions:: `subst', `sublis', etc.
4227* Lists as Sets:: `member*', `adjoin', `union', etc.
4228* Association Lists:: `assoc*', `rassoc*', `acons', `pairlis'
4229@end menu
4230
4231@node List Functions, Substitution of Expressions, Lists, Lists
4232@section List Functions
4233
4234@noindent
4235This section describes a number of simple operations on lists,
4236i.e., chains of cons cells.
4237
4238@defun caddr x
4239This function is equivalent to @code{(car (cdr (cdr @var{x})))}.
4240Likewise, this package defines all 28 @code{c@var{xxx}r} functions
4241where @var{xxx} is up to four @samp{a}s and/or @samp{d}s.
4242All of these functions are @code{setf}-able, and calls to them
4243are expanded inline by the byte-compiler for maximum efficiency.
4244@end defun
4245
4246@defun first x
4247This function is a synonym for @code{(car @var{x})}. Likewise,
4248the functions @code{second}, @code{third}, @dots{}, through
4249@code{tenth} return the given element of the list @var{x}.
4250@end defun
4251
4252@defun rest x
4253This function is a synonym for @code{(cdr @var{x})}.
4254@end defun
4255
4256@defun endp x
4257Common Lisp defines this function to act like @code{null}, but
4258signaling an error if @code{x} is neither a @code{nil} nor a
4259cons cell. This package simply defines @code{endp} as a synonym
4260for @code{null}.
4261@end defun
4262
4263@defun list-length x
4264This function returns the length of list @var{x}, exactly like
4265@code{(length @var{x})}, except that if @var{x} is a circular
4266list (where the cdr-chain forms a loop rather than terminating
4267with @code{nil}), this function returns @code{nil}. (The regular
4268@code{length} function would get stuck if given a circular list.)
4269@end defun
4270
4271@defun last* x &optional n
4272This function returns the last cons, or the @var{n}th-to-last cons,
4273of the list @var{x}. If @var{n} is omitted it defaults to 1.
4274The ``last cons'' means the first cons cell of the list whose
4275@code{cdr} is not another cons cell. (For normal lists, the
4276@code{cdr} of the last cons will be @code{nil}.) This function
4277returns @code{nil} if @var{x} is @code{nil} or shorter than
4278@var{n}. Note that the last @emph{element} of the list is
4279@code{(car (last @var{x}))}.
4280
4281The Emacs function @code{last} does the same thing
4282except that it does not handle the optional argument @var{n}.
4283@end defun
4284
4285@defun butlast x &optional n
4286This function returns the list @var{x} with the last element,
4287or the last @var{n} elements, removed. If @var{n} is greater
4288than zero it makes a copy of the list so as not to damage the
4289original list. In general, @code{(append (butlast @var{x} @var{n})
4290(last @var{x} @var{n}))} will return a list equal to @var{x}.
4291@end defun
4292
4293@defun nbutlast x &optional n
4294This is a version of @code{butlast} that works by destructively
4295modifying the @code{cdr} of the appropriate element, rather than
4296making a copy of the list.
4297@end defun
4298
4299@defun list* arg &rest others
4300This function constructs a list of its arguments. The final
4301argument becomes the @code{cdr} of the last cell constructed.
4302Thus, @code{(list* @var{a} @var{b} @var{c})} is equivalent to
4303@code{(cons @var{a} (cons @var{b} @var{c}))}, and
4304@code{(list* @var{a} @var{b} nil)} is equivalent to
4305@code{(list @var{a} @var{b})}.
4306
4307(Note that this function really is called @code{list*} in Common
4308Lisp; it is not a name invented for this package like @code{member*}
4309or @code{defun*}.)
4310@end defun
4311
4312@defun ldiff list sublist
4313If @var{sublist} is a sublist of @var{list}, i.e., is @code{eq} to
4314one of the cons cells of @var{list}, then this function returns
4315a copy of the part of @var{list} up to but not including
4316@var{sublist}. For example, @code{(ldiff x (cddr x))} returns
4317the first two elements of the list @code{x}. The result is a
4318copy; the original @var{list} is not modified. If @var{sublist}
4319is not a sublist of @var{list}, a copy of the entire @var{list}
4320is returned.
4321@end defun
4322
4323@defun copy-list list
4324This function returns a copy of the list @var{list}. It copies
4325dotted lists like @code{(1 2 . 3)} correctly.
4326@end defun
4327
4328@defun copy-tree x &optional vecp
4329This function returns a copy of the tree of cons cells @var{x}.
4330Unlike @code{copy-sequence} (and its alias @code{copy-list}),
4331which copies only along the @code{cdr} direction, this function
4332copies (recursively) along both the @code{car} and the @code{cdr}
4333directions. If @var{x} is not a cons cell, the function simply
4334returns @var{x} unchanged. If the optional @var{vecp} argument
4335is true, this function copies vectors (recursively) as well as
4336cons cells.
4337@end defun
4338
4339@defun tree-equal x y @t{&key :test :test-not :key}
4340This function compares two trees of cons cells. If @var{x} and
4341@var{y} are both cons cells, their @code{car}s and @code{cdr}s are
4342compared recursively. If neither @var{x} nor @var{y} is a cons
4343cell, they are compared by @code{eql}, or according to the
4344specified test. The @code{:key} function, if specified, is
4345applied to the elements of both trees. @xref{Sequences}.
4346@end defun
4347
4348@iftex
4349@secno=3
4350@end iftex
4351
4352@node Substitution of Expressions, Lists as Sets, List Functions, Lists
4353@section Substitution of Expressions
4354
4355@noindent
4356These functions substitute elements throughout a tree of cons
4357cells. (@xref{Sequence Functions}, for the @code{substitute}
4358function, which works on just the top-level elements of a list.)
4359
4360@defun subst new old tree @t{&key :test :test-not :key}
4361This function substitutes occurrences of @var{old} with @var{new}
4362in @var{tree}, a tree of cons cells. It returns a substituted
4363tree, which will be a copy except that it may share storage with
4364the argument @var{tree} in parts where no substitutions occurred.
4365The original @var{tree} is not modified. This function recurses
4366on, and compares against @var{old}, both @code{car}s and @code{cdr}s
4367of the component cons cells. If @var{old} is itself a cons cell,
4368then matching cells in the tree are substituted as usual without
4369recursively substituting in that cell. Comparisons with @var{old}
4370are done according to the specified test (@code{eql} by default).
4371The @code{:key} function is applied to the elements of the tree
4372but not to @var{old}.
4373@end defun
4374
4375@defun nsubst new old tree @t{&key :test :test-not :key}
4376This function is like @code{subst}, except that it works by
4377destructive modification (by @code{setcar} or @code{setcdr})
4378rather than copying.
4379@end defun
4380
4381@findex subst-if
4382@findex subst-if-not
4383@findex nsubst-if
4384@findex nsubst-if-not
4385The @code{subst-if}, @code{subst-if-not}, @code{nsubst-if}, and
4386@code{nsubst-if-not} functions are defined similarly.
4387
4388@defun sublis alist tree @t{&key :test :test-not :key}
4389This function is like @code{subst}, except that it takes an
4390association list @var{alist} of @var{old}-@var{new} pairs.
4391Each element of the tree (after applying the @code{:key}
4392function, if any), is compared with the @code{car}s of
4393@var{alist}; if it matches, it is replaced by the corresponding
4394@code{cdr}.
4395@end defun
4396
4397@defun nsublis alist tree @t{&key :test :test-not :key}
4398This is a destructive version of @code{sublis}.
4399@end defun
4400
4401@node Lists as Sets, Association Lists, Substitution of Expressions, Lists
4402@section Lists as Sets
4403
4404@noindent
4405These functions perform operations on lists which represent sets
4406of elements.
4407
6bf7aab6
DL
4408@defun member* item list @t{&key :test :test-not :key}
4409This function searches @var{list} for an element matching @var{item}.
4410If a match is found, it returns the cons cell whose @code{car} was
4411the matching element. Otherwise, it returns @code{nil}. Elements
4412are compared by @code{eql} by default; you can use the @code{:test},
4413@code{:test-not}, and @code{:key} arguments to modify this behavior.
4414@xref{Sequences}.
4415
4416Note that this function's name is suffixed by @samp{*} to avoid
4417the incompatible @code{member} function defined in Emacs 19.
4418(That function uses @code{equal} for comparisons; it is equivalent
4419to @code{(member* @var{item} @var{list} :test 'equal)}.)
4420@end defun
4421
4422@findex member-if
4423@findex member-if-not
4424The @code{member-if} and @code{member-if-not} functions
4425analogously search for elements which satisfy a given predicate.
4426
4427@defun tailp sublist list
4428This function returns @code{t} if @var{sublist} is a sublist of
4429@var{list}, i.e., if @var{sublist} is @code{eql} to @var{list} or to
4430any of its @code{cdr}s.
4431@end defun
4432
4433@defun adjoin item list @t{&key :test :test-not :key}
4434This function conses @var{item} onto the front of @var{list},
4435like @code{(cons @var{item} @var{list})}, but only if @var{item}
4436is not already present on the list (as determined by @code{member*}).
4437If a @code{:key} argument is specified, it is applied to
4438@var{item} as well as to the elements of @var{list} during
4439the search, on the reasoning that @var{item} is ``about'' to
4440become part of the list.
4441@end defun
4442
4443@defun union list1 list2 @t{&key :test :test-not :key}
4444This function combines two lists which represent sets of items,
4445returning a list that represents the union of those two sets.
4446The result list will contain all items which appear in @var{list1}
4447or @var{list2}, and no others. If an item appears in both
4448@var{list1} and @var{list2} it will be copied only once. If
4449an item is duplicated in @var{list1} or @var{list2}, it is
4450undefined whether or not that duplication will survive in the
4451result list. The order of elements in the result list is also
4452undefined.
4453@end defun
4454
4455@defun nunion list1 list2 @t{&key :test :test-not :key}
4456This is a destructive version of @code{union}; rather than copying,
4457it tries to reuse the storage of the argument lists if possible.
4458@end defun
4459
4460@defun intersection list1 list2 @t{&key :test :test-not :key}
4461This function computes the intersection of the sets represented
4462by @var{list1} and @var{list2}. It returns the list of items
4463which appear in both @var{list1} and @var{list2}.
4464@end defun
4465
4466@defun nintersection list1 list2 @t{&key :test :test-not :key}
4467This is a destructive version of @code{intersection}. It
4468tries to reuse storage of @var{list1} rather than copying.
4469It does @emph{not} reuse the storage of @var{list2}.
4470@end defun
4471
4472@defun set-difference list1 list2 @t{&key :test :test-not :key}
4473This function computes the ``set difference'' of @var{list1}
4474and @var{list2}, i.e., the set of elements that appear in
4475@var{list1} but @emph{not} in @var{list2}.
4476@end defun
4477
4478@defun nset-difference list1 list2 @t{&key :test :test-not :key}
4479This is a destructive @code{set-difference}, which will try
4480to reuse @var{list1} if possible.
4481@end defun
4482
4483@defun set-exclusive-or list1 list2 @t{&key :test :test-not :key}
4484This function computes the ``set exclusive or'' of @var{list1}
4485and @var{list2}, i.e., the set of elements that appear in
4486exactly one of @var{list1} and @var{list2}.
4487@end defun
4488
4489@defun nset-exclusive-or list1 list2 @t{&key :test :test-not :key}
4490This is a destructive @code{set-exclusive-or}, which will try
4491to reuse @var{list1} and @var{list2} if possible.
4492@end defun
4493
4494@defun subsetp list1 list2 @t{&key :test :test-not :key}
4495This function checks whether @var{list1} represents a subset
4496of @var{list2}, i.e., whether every element of @var{list1}
4497also appears in @var{list2}.
4498@end defun
4499
4500@node Association Lists, , Lists as Sets, Lists
4501@section Association Lists
4502
4503@noindent
4504An @dfn{association list} is a list representing a mapping from
4505one set of values to another; any list whose elements are cons
4506cells is an association list.
4507
4508@defun assoc* item a-list @t{&key :test :test-not :key}
4509This function searches the association list @var{a-list} for an
4510element whose @code{car} matches (in the sense of @code{:test},
4511@code{:test-not}, and @code{:key}, or by comparison with @code{eql})
4512a given @var{item}. It returns the matching element, if any,
4513otherwise @code{nil}. It ignores elements of @var{a-list} which
4514are not cons cells. (This corresponds to the behavior of
4515@code{assq} and @code{assoc} in Emacs Lisp; Common Lisp's
4516@code{assoc} ignores @code{nil}s but considers any other non-cons
4517elements of @var{a-list} to be an error.)
4518@end defun
4519
4520@defun rassoc* item a-list @t{&key :test :test-not :key}
4521This function searches for an element whose @code{cdr} matches
4522@var{item}. If @var{a-list} represents a mapping, this applies
4523the inverse of the mapping to @var{item}.
4524@end defun
4525
6bf7aab6
DL
4526@findex assoc-if
4527@findex assoc-if-not
4528@findex rassoc-if
4529@findex rassoc-if-not
4530The @code{assoc-if}, @code{assoc-if-not}, @code{rassoc-if},
4531and @code{rassoc-if-not} functions are defined similarly.
4532
4533Two simple functions for constructing association lists are:
4534
4535@defun acons key value alist
4536This is equivalent to @code{(cons (cons @var{key} @var{value}) @var{alist})}.
4537@end defun
4538
4539@defun pairlis keys values &optional alist
4540This is equivalent to @code{(nconc (mapcar* 'cons @var{keys} @var{values})
4541@var{alist})}.
4542@end defun
4543
4544@node Hash Tables, Structures, Lists, Top
4545@chapter Hash Tables
4546
4547@noindent
4548A @dfn{hash table} is a data structure that maps ``keys'' onto
4549``values.'' Keys and values can be arbitrary Lisp data objects.
4550Hash tables have the property that the time to search for a given
4551key is roughly constant; simpler data structures like association
4552lists take time proportional to the number of entries in the list.
4553
4554@defun make-hash-table @t{&key :test :size}
4555This function creates and returns a hash-table object whose
4556function for comparing elements is @code{:test} (@code{eql}
4557by default), and which is allocated to fit about @code{:size}
4558elements. The @code{:size} argument is purely advisory; the
4559table will stretch automatically if you store more elements in
4560it. If @code{:size} is omitted, a reasonable default is used.
4561
4562Common Lisp allows only @code{eq}, @code{eql}, @code{equal},
4563and @code{equalp} as legal values for the @code{:test} argument.
4564In this package, any reasonable predicate function will work,
4565though if you use something else you should check the details of
4566the hashing function described below to make sure it is suitable
4567for your predicate.
4568
4569Some versions of Emacs (like Lucid Emacs 19) include a built-in
4570hash table type; in these versions, @code{make-hash-table} with
4571a test of @code{eq} will use these built-in hash tables. In all
4572other cases, it will return a hash-table object which takes the
4573form of a list with an identifying ``tag'' symbol at the front.
4574All of the hash table functions in this package can operate on
4575both types of hash table; normally you will never know which
4576type is being used.
4577
4578This function accepts the additional Common Lisp keywords
4579@code{:rehash-size} and @code{:rehash-threshold}, but it ignores
4580their values.
4581@end defun
4582
4583@defun gethash key table &optional default
4584This function looks up @var{key} in @var{table}. If @var{key}
4585exists in the table, in the sense that it matches any of the existing
4586keys according to the table's test function, then the associated value
4587is returned. Otherwise, @var{default} (or @code{nil}) is returned.
4588
4589To store new data in the hash table, use @code{setf} on a call to
4590@code{gethash}. If @var{key} already exists in the table, the
4591corresponding value is changed to the stored value. If @var{key}
4592does not already exist, a new entry is added to the table and the
4593table is reallocated to a larger size if necessary. The @var{default}
4594argument is allowed but ignored in this case. The situation is
4595exactly analogous to that of @code{get*}; @pxref{Property Lists}.
4596@end defun
4597
4598@defun remhash key table
4599This function removes the entry for @var{key} from @var{table}.
4600If an entry was removed, it returns @code{t}. If @var{key} does
4601not appear in the table, it does nothing and returns @code{nil}.
4602@end defun
4603
4604@defun clrhash table
4605This function removes all the entries from @var{table}, leaving
4606an empty hash table.
4607@end defun
4608
4609@defun maphash function table
4610This function calls @var{function} for each entry in @var{table}.
4611It passes two arguments to @var{function}, the key and the value
4612of the given entry. The return value of @var{function} is ignored;
4613@var{maphash} itself returns @code{nil}. @xref{Loop Facility}, for
4614an alternate way of iterating over hash tables.
4615@end defun
4616
4617@defun hash-table-count table
4618This function returns the number of entries in @var{table}.
4619@strong{Warning:} The current implementation of Lucid Emacs 19
4620hash-tables does not decrement the stored @code{count} when
4621@code{remhash} removes an entry. Therefore, the return value of
4622this function is not dependable if you have used @code{remhash}
4623on the table and the table's test is @code{eq}. A slower, but
4624reliable, way to count the entries is @code{(loop for x being the
4625hash-keys of @var{table} count t)}.
4626@end defun
4627
4628@defun hash-table-p object
4629This function returns @code{t} if @var{object} is a hash table,
4630@code{nil} otherwise. It recognizes both types of hash tables
4631(both Lucid Emacs built-in tables and tables implemented with
4632special lists.)
4633@end defun
4634
4635Sometimes when dealing with hash tables it is useful to know the
4636exact ``hash function'' that is used. This package implements
4637hash tables using Emacs Lisp ``obarrays,'' which are the same
4638data structure that Emacs Lisp uses to keep track of symbols.
4639Each hash table includes an embedded obarray. Key values given
4640to @code{gethash} are converted by various means into strings,
4641which are then looked up in the obarray using @code{intern} and
4642@code{intern-soft}. The symbol, or ``bucket,'' corresponding to
4643a given key string includes as its @code{symbol-value} an association
4644list of all key-value pairs which hash to that string. Depending
4645on the test function, it is possible for many entries to hash to
4646the same bucket. For example, if the test is @code{eql}, then the
4647symbol @code{foo} and two separately built strings @code{"foo"} will
4648create three entries in the same bucket. Search time is linear
4649within buckets, so hash tables will be most effective if you arrange
4650not to store too many things that hash the same.
4651
4652The following algorithm is used to convert Lisp objects to hash
4653strings:
4654
4655@itemize @bullet
4656@item
4657Strings are used directly as hash strings. (However, if the test
4658function is @code{equalp}, strings are @code{downcase}d first.)
4659
4660@item
4661Symbols are hashed according to their @code{symbol-name}.
4662
4663@item
4664Integers are hashed into one of 16 buckets depending on their value
4665modulo 16. Floating-point numbers are truncated to integers and
4666hashed modulo 16.
4667
4668@item
4669Cons cells are hashed according to their @code{car}s; nonempty vectors
4670are hashed according to their first element.
4671
4672@item
4673All other types of objects hash into a single bucket named @code{"*"}.
4674@end itemize
4675
4676@noindent
4677Thus, for example, searching among many buffer objects in a hash table
4678will devolve to a (still fairly fast) linear-time search through a
4679single bucket, whereas searching for different symbols will be very
4680fast since each symbol will, in general, hash into its own bucket.
4681
4682The size of the obarray in a hash table is automatically adjusted
4683as the number of elements increases.
4684
4685As a special case, @code{make-hash-table} with a @code{:size} argument
4686of 0 or 1 will create a hash-table object that uses a single association
4687list rather than an obarray of many lists. For very small tables this
4688structure will be more efficient since lookup does not require
4689converting the key to a string or looking it up in an obarray.
4690However, such tables are guaranteed to take time proportional to
4691their size to do a search.
4692
4693@iftex
4694@chapno=18
4695@end iftex
4696
4697@node Structures, Assertions, Hash Tables, Top
4698@chapter Structures
4699
4700@noindent
4701The Common Lisp @dfn{structure} mechanism provides a general way
4702to define data types similar to C's @code{struct} types. A
4703structure is a Lisp object containing some number of @dfn{slots},
4704each of which can hold any Lisp data object. Functions are
4705provided for accessing and setting the slots, creating or copying
4706structure objects, and recognizing objects of a particular structure
4707type.
4708
4709In true Common Lisp, each structure type is a new type distinct
4710from all existing Lisp types. Since the underlying Emacs Lisp
4711system provides no way to create new distinct types, this package
4712implements structures as vectors (or lists upon request) with a
4713special ``tag'' symbol to identify them.
4714
4715@defspec defstruct name slots@dots{}
4716The @code{defstruct} form defines a new structure type called
4717@var{name}, with the specified @var{slots}. (The @var{slots}
4718may begin with a string which documents the structure type.)
4719In the simplest case, @var{name} and each of the @var{slots}
4720are symbols. For example,
4721
4722@example
4723(defstruct person name age sex)
4724@end example
4725
4726@noindent
4727defines a struct type called @code{person} which contains three
4728slots. Given a @code{person} object @var{p}, you can access those
4729slots by calling @code{(person-name @var{p})}, @code{(person-age @var{p})},
4730and @code{(person-sex @var{p})}. You can also change these slots by
4731using @code{setf} on any of these place forms:
4732
4733@example
4734(incf (person-age birthday-boy))
4735@end example
4736
4737You can create a new @code{person} by calling @code{make-person},
4738which takes keyword arguments @code{:name}, @code{:age}, and
4739@code{:sex} to specify the initial values of these slots in the
4740new object. (Omitting any of these arguments leaves the corresponding
4741slot ``undefined,'' according to the Common Lisp standard; in Emacs
4742Lisp, such uninitialized slots are filled with @code{nil}.)
4743
4744Given a @code{person}, @code{(copy-person @var{p})} makes a new
4745object of the same type whose slots are @code{eq} to those of @var{p}.
4746
4747Given any Lisp object @var{x}, @code{(person-p @var{x})} returns
4748true if @var{x} looks like a @code{person}, false otherwise. (Again,
4749in Common Lisp this predicate would be exact; in Emacs Lisp the
4750best it can do is verify that @var{x} is a vector of the correct
4751length which starts with the correct tag symbol.)
4752
4753Accessors like @code{person-name} normally check their arguments
4754(effectively using @code{person-p}) and signal an error if the
4755argument is the wrong type. This check is affected by
4756@code{(optimize (safety @dots{}))} declarations. Safety level 1,
4757the default, uses a somewhat optimized check that will detect all
4758incorrect arguments, but may use an uninformative error message
4759(e.g., ``expected a vector'' instead of ``expected a @code{person}'').
4760Safety level 0 omits all checks except as provided by the underlying
4761@code{aref} call; safety levels 2 and 3 do rigorous checking that will
4762always print a descriptive error message for incorrect inputs.
4763@xref{Declarations}.
4764
4765@example
4766(setq dave (make-person :name "Dave" :sex 'male))
4767 @result{} [cl-struct-person "Dave" nil male]
4768(setq other (copy-person dave))
4769 @result{} [cl-struct-person "Dave" nil male]
4770(eq dave other)
4771 @result{} nil
4772(eq (person-name dave) (person-name other))
4773 @result{} t
4774(person-p dave)
4775 @result{} t
4776(person-p [1 2 3 4])
4777 @result{} nil
4778(person-p "Bogus")
4779 @result{} nil
4780(person-p '[cl-struct-person counterfeit person object])
4781 @result{} t
4782@end example
4783
4784In general, @var{name} is either a name symbol or a list of a name
4785symbol followed by any number of @dfn{struct options}; each @var{slot}
4786is either a slot symbol or a list of the form @samp{(@var{slot-name}
4787@var{default-value} @var{slot-options}@dots{})}. The @var{default-value}
4788is a Lisp form which is evaluated any time an instance of the
4789structure type is created without specifying that slot's value.
4790
4791Common Lisp defines several slot options, but the only one
4792implemented in this package is @code{:read-only}. A non-@code{nil}
4793value for this option means the slot should not be @code{setf}-able;
4794the slot's value is determined when the object is created and does
4795not change afterward.
4796
4797@example
4798(defstruct person
4799 (name nil :read-only t)
4800 age
4801 (sex 'unknown))
4802@end example
4803
4804Any slot options other than @code{:read-only} are ignored.
4805
4806For obscure historical reasons, structure options take a different
4807form than slot options. A structure option is either a keyword
4808symbol, or a list beginning with a keyword symbol possibly followed
4809by arguments. (By contrast, slot options are key-value pairs not
4810enclosed in lists.)
4811
4812@example
4813(defstruct (person (:constructor create-person)
4814 (:type list)
4815 :named)
4816 name age sex)
4817@end example
4818
4819The following structure options are recognized.
4820
4821@table @code
4822@iftex
4823@itemmax=0 in
4824@advance@leftskip-.5@tableindent
4825@end iftex
4826@item :conc-name
4827The argument is a symbol whose print name is used as the prefix for
4828the names of slot accessor functions. The default is the name of
4829the struct type followed by a hyphen. The option @code{(:conc-name p-)}
4830would change this prefix to @code{p-}. Specifying @code{nil} as an
4831argument means no prefix, so that the slot names themselves are used
4832to name the accessor functions.
4833
4834@item :constructor
4835In the simple case, this option takes one argument which is an
4836alternate name to use for the constructor function. The default
4837is @code{make-@var{name}}, e.g., @code{make-person}. The above
4838example changes this to @code{create-person}. Specifying @code{nil}
4839as an argument means that no standard constructor should be
4840generated at all.
4841
4842In the full form of this option, the constructor name is followed
4843by an arbitrary argument list. @xref{Program Structure}, for a
4844description of the format of Common Lisp argument lists. All
4845options, such as @code{&rest} and @code{&key}, are supported.
4846The argument names should match the slot names; each slot is
4847initialized from the corresponding argument. Slots whose names
4848do not appear in the argument list are initialized based on the
4849@var{default-value} in their slot descriptor. Also, @code{&optional}
4850and @code{&key} arguments which don't specify defaults take their
4851defaults from the slot descriptor. It is legal to include arguments
4852which don't correspond to slot names; these are useful if they are
4853referred to in the defaults for optional, keyword, or @code{&aux}
4854arguments which @emph{do} correspond to slots.
4855
4856You can specify any number of full-format @code{:constructor}
4857options on a structure. The default constructor is still generated
4858as well unless you disable it with a simple-format @code{:constructor}
4859option.
4860
4861@example
4862(defstruct
4863 (person
4864 (:constructor nil) ; no default constructor
4865 (:constructor new-person (name sex &optional (age 0)))
4866 (:constructor new-hound (&key (name "Rover")
4867 (dog-years 0)
4868 &aux (age (* 7 dog-years))
4869 (sex 'canine))))
4870 name age sex)
4871@end example
4872
4873The first constructor here takes its arguments positionally rather
4874than by keyword. (In official Common Lisp terminology, constructors
4875that work By Order of Arguments instead of by keyword are called
4876``BOA constructors.'' No, I'm not making this up.) For example,
4877@code{(new-person "Jane" 'female)} generates a person whose slots
4878are @code{"Jane"}, 0, and @code{female}, respectively.
4879
4880The second constructor takes two keyword arguments, @code{:name},
4881which initializes the @code{name} slot and defaults to @code{"Rover"},
4882and @code{:dog-years}, which does not itself correspond to a slot
4883but which is used to initialize the @code{age} slot. The @code{sex}
4884slot is forced to the symbol @code{canine} with no syntax for
4885overriding it.
4886
4887@item :copier
4888The argument is an alternate name for the copier function for
4889this type. The default is @code{copy-@var{name}}. @code{nil}
4890means not to generate a copier function. (In this implementation,
4891all copier functions are simply synonyms for @code{copy-sequence}.)
4892
4893@item :predicate
4894The argument is an alternate name for the predicate which recognizes
4895objects of this type. The default is @code{@var{name}-p}. @code{nil}
4896means not to generate a predicate function. (If the @code{:type}
4897option is used without the @code{:named} option, no predicate is
4898ever generated.)
4899
4900In true Common Lisp, @code{typep} is always able to recognize a
4901structure object even if @code{:predicate} was used. In this
4902package, @code{typep} simply looks for a function called
4903@code{@var{typename}-p}, so it will work for structure types
4904only if they used the default predicate name.
4905
4906@item :include
4907This option implements a very limited form of C++-style inheritance.
4908The argument is the name of another structure type previously
4909created with @code{defstruct}. The effect is to cause the new
4910structure type to inherit all of the included structure's slots
4911(plus, of course, any new slots described by this struct's slot
4912descriptors). The new structure is considered a ``specialization''
4913of the included one. In fact, the predicate and slot accessors
4914for the included type will also accept objects of the new type.
4915
4916If there are extra arguments to the @code{:include} option after
4917the included-structure name, these options are treated as replacement
4918slot descriptors for slots in the included structure, possibly with
4919modified default values. Borrowing an example from Steele:
4920
4921@example
4922(defstruct person name (age 0) sex)
4923 @result{} person
4924(defstruct (astronaut (:include person (age 45)))
4925 helmet-size
4926 (favorite-beverage 'tang))
4927 @result{} astronaut
4928
4929(setq joe (make-person :name "Joe"))
4930 @result{} [cl-struct-person "Joe" 0 nil]
4931(setq buzz (make-astronaut :name "Buzz"))
4932 @result{} [cl-struct-astronaut "Buzz" 45 nil nil tang]
4933
4934(list (person-p joe) (person-p buzz))
4935 @result{} (t t)
4936(list (astronaut-p joe) (astronaut-p buzz))
4937 @result{} (nil t)
4938
4939(person-name buzz)
4940 @result{} "Buzz"
4941(astronaut-name joe)
4942 @result{} error: "astronaut-name accessing a non-astronaut"
4943@end example
4944
4945Thus, if @code{astronaut} is a specialization of @code{person},
4946then every @code{astronaut} is also a @code{person} (but not the
4947other way around). Every @code{astronaut} includes all the slots
4948of a @code{person}, plus extra slots that are specific to
4949astronauts. Operations that work on people (like @code{person-name})
4950work on astronauts just like other people.
4951
4952@item :print-function
4953In full Common Lisp, this option allows you to specify a function
4954which is called to print an instance of the structure type. The
4955Emacs Lisp system offers no hooks into the Lisp printer which would
4956allow for such a feature, so this package simply ignores
4957@code{:print-function}.
4958
4959@item :type
4960The argument should be one of the symbols @code{vector} or @code{list}.
4961This tells which underlying Lisp data type should be used to implement
4962the new structure type. Vectors are used by default, but
4963@code{(:type list)} will cause structure objects to be stored as
4964lists instead.
4965
4966The vector representation for structure objects has the advantage
4967that all structure slots can be accessed quickly, although creating
4968vectors is a bit slower in Emacs Lisp. Lists are easier to create,
4969but take a relatively long time accessing the later slots.
4970
4971@item :named
4972This option, which takes no arguments, causes a characteristic ``tag''
4973symbol to be stored at the front of the structure object. Using
4974@code{:type} without also using @code{:named} will result in a
4975structure type stored as plain vectors or lists with no identifying
4976features.
4977
4978The default, if you don't specify @code{:type} explicitly, is to
4979use named vectors. Therefore, @code{:named} is only useful in
4980conjunction with @code{:type}.
4981
4982@example
4983(defstruct (person1) name age sex)
4984(defstruct (person2 (:type list) :named) name age sex)
4985(defstruct (person3 (:type list)) name age sex)
4986
4987(setq p1 (make-person1))
4988 @result{} [cl-struct-person1 nil nil nil]
4989(setq p2 (make-person2))
4990 @result{} (person2 nil nil nil)
4991(setq p3 (make-person3))
4992 @result{} (nil nil nil)
4993
4994(person1-p p1)
4995 @result{} t
4996(person2-p p2)
4997 @result{} t
4998(person3-p p3)
4999 @result{} error: function person3-p undefined
5000@end example
5001
5002Since unnamed structures don't have tags, @code{defstruct} is not
5003able to make a useful predicate for recognizing them. Also,
5004accessors like @code{person3-name} will be generated but they
5005will not be able to do any type checking. The @code{person3-name}
5006function, for example, will simply be a synonym for @code{car} in
5007this case. By contrast, @code{person2-name} is able to verify
5008that its argument is indeed a @code{person2} object before
5009proceeding.
5010
5011@item :initial-offset
5012The argument must be a nonnegative integer. It specifies a
5013number of slots to be left ``empty'' at the front of the
5014structure. If the structure is named, the tag appears at the
5015specified position in the list or vector; otherwise, the first
5016slot appears at that position. Earlier positions are filled
5017with @code{nil} by the constructors and ignored otherwise. If
5018the type @code{:include}s another type, then @code{:initial-offset}
5019specifies a number of slots to be skipped between the last slot
5020of the included type and the first new slot.
5021@end table
5022@end defspec
5023
5024Except as noted, the @code{defstruct} facility of this package is
5025entirely compatible with that of Common Lisp.
5026
5027@iftex
5028@chapno=23
5029@end iftex
5030
5031@node Assertions, Efficiency Concerns, Structures, Top
5032@chapter Assertions and Errors
5033
5034@noindent
5035This section describes two macros that test @dfn{assertions}, i.e.,
5036conditions which must be true if the program is operating correctly.
5037Assertions never add to the behavior of a Lisp program; they simply
5038make ``sanity checks'' to make sure everything is as it should be.
5039
5040If the optimization property @code{speed} has been set to 3, and
5041@code{safety} is less than 3, then the byte-compiler will optimize
5042away the following assertions. Because assertions might be optimized
5043away, it is a bad idea for them to include side-effects.
5044
5045@defspec assert test-form [show-args string args@dots{}]
5046This form verifies that @var{test-form} is true (i.e., evaluates to
5047a non-@code{nil} value). If so, it returns @code{nil}. If the test
5048is not satisfied, @code{assert} signals an error.
5049
5050A default error message will be supplied which includes @var{test-form}.
5051You can specify a different error message by including a @var{string}
5052argument plus optional extra arguments. Those arguments are simply
5053passed to @code{error} to signal the error.
5054
5055If the optional second argument @var{show-args} is @code{t} instead
5056of @code{nil}, then the error message (with or without @var{string})
5057will also include all non-constant arguments of the top-level
5058@var{form}. For example:
5059
5060@example
5061(assert (> x 10) t "x is too small: %d")
5062@end example
5063
5064This usage of @var{show-args} is an extension to Common Lisp. In
5065true Common Lisp, the second argument gives a list of @var{places}
5066which can be @code{setf}'d by the user before continuing from the
5067error. Since Emacs Lisp does not support continuable errors, it
5068makes no sense to specify @var{places}.
5069@end defspec
5070
5071@defspec check-type form type [string]
5072This form verifies that @var{form} evaluates to a value of type
5073@var{type}. If so, it returns @code{nil}. If not, @code{check-type}
5074signals a @code{wrong-type-argument} error. The default error message
5075lists the erroneous value along with @var{type} and @var{form}
5076themselves. If @var{string} is specified, it is included in the
5077error message in place of @var{type}. For example:
5078
5079@example
5080(check-type x (integer 1 *) "a positive integer")
5081@end example
5082
5083@xref{Type Predicates}, for a description of the type specifiers
5084that may be used for @var{type}.
5085
5086Note that in Common Lisp, the first argument to @code{check-type}
5087must be a @var{place} suitable for use by @code{setf}, because
5088@code{check-type} signals a continuable error that allows the
5089user to modify @var{place}.
5090@end defspec
5091
5092The following error-related macro is also defined:
5093
5094@defspec ignore-errors forms@dots{}
5095This executes @var{forms} exactly like a @code{progn}, except that
5096errors are ignored during the @var{forms}. More precisely, if
5097an error is signaled then @code{ignore-errors} immediately
5098aborts execution of the @var{forms} and returns @code{nil}.
5099If the @var{forms} complete successfully, @code{ignore-errors}
5100returns the result of the last @var{form}.
5101@end defspec
5102
5103@node Efficiency Concerns, Common Lisp Compatibility, Assertions, Top
5104@appendix Efficiency Concerns
5105
5106@appendixsec Macros
5107
5108@noindent
5109Many of the advanced features of this package, such as @code{defun*},
5110@code{loop}, and @code{setf}, are implemented as Lisp macros. In
5111byte-compiled code, these complex notations will be expanded into
5112equivalent Lisp code which is simple and efficient. For example,
5113the forms
5114
5115@example
5116(incf i n)
5117(push x (car p))
5118@end example
5119
5120@noindent
5121are expanded at compile-time to the Lisp forms
5122
5123@example
5124(setq i (+ i n))
5125(setcar p (cons x (car p)))
5126@end example
5127
5128@noindent
5129which are the most efficient ways of doing these respective operations
5130in Lisp. Thus, there is no performance penalty for using the more
5131readable @code{incf} and @code{push} forms in your compiled code.
5132
5133@emph{Interpreted} code, on the other hand, must expand these macros
5134every time they are executed. For this reason it is strongly
5135recommended that code making heavy use of macros be compiled.
5136(The features labeled ``Special Form'' instead of ``Function'' in
5137this manual are macros.) A loop using @code{incf} a hundred times
5138will execute considerably faster if compiled, and will also
5139garbage-collect less because the macro expansion will not have
5140to be generated, used, and thrown away a hundred times.
5141
5142You can find out how a macro expands by using the
5143@code{cl-prettyexpand} function.
5144
5145@defun cl-prettyexpand form &optional full
5146This function takes a single Lisp form as an argument and inserts
5147a nicely formatted copy of it in the current buffer (which must be
5148in Lisp mode so that indentation works properly). It also expands
5149all Lisp macros which appear in the form. The easiest way to use
5150this function is to go to the @code{*scratch*} buffer and type, say,
5151
5152@example
5153(cl-prettyexpand '(loop for x below 10 collect x))
5154@end example
5155
5156@noindent
5157and type @kbd{C-x C-e} immediately after the closing parenthesis;
5158the expansion
5159
5160@example
5161(block nil
5162 (let* ((x 0)
5163 (G1004 nil))
5164 (while (< x 10)
5165 (setq G1004 (cons x G1004))
5166 (setq x (+ x 1)))
5167 (nreverse G1004)))
5168@end example
5169
5170@noindent
5171will be inserted into the buffer. (The @code{block} macro is
5172expanded differently in the interpreter and compiler, so
5173@code{cl-prettyexpand} just leaves it alone. The temporary
5174variable @code{G1004} was created by @code{gensym}.)
5175
5176If the optional argument @var{full} is true, then @emph{all}
5177macros are expanded, including @code{block}, @code{eval-when},
5178and compiler macros. Expansion is done as if @var{form} were
5179a top-level form in a file being compiled. For example,
5180
5181@example
5182(cl-prettyexpand '(pushnew 'x list))
5183 @print{} (setq list (adjoin 'x list))
5184(cl-prettyexpand '(pushnew 'x list) t)
5185 @print{} (setq list (if (memq 'x list) list (cons 'x list)))
5186(cl-prettyexpand '(caddr (member* 'a list)) t)
5187 @print{} (car (cdr (cdr (memq 'a list))))
5188@end example
5189
5190Note that @code{adjoin}, @code{caddr}, and @code{member*} all
5191have built-in compiler macros to optimize them in common cases.
5192@end defun
5193
5194@ifinfo
5195@example
5196
5197@end example
5198@end ifinfo
5199@appendixsec Error Checking
5200
5201@noindent
5202Common Lisp compliance has in general not been sacrificed for the
5203sake of efficiency. A few exceptions have been made for cases
5204where substantial gains were possible at the expense of marginal
5205incompatibility. One example is the use of @code{memq} (which is
5206treated very efficiently by the byte-compiler) to scan for keyword
5207arguments; this can become confused in rare cases when keyword
5208symbols are used as both keywords and data values at once. This
5209is extremely unlikely to occur in practical code, and the use of
5210@code{memq} allows functions with keyword arguments to be nearly
5211as fast as functions that use @code{&optional} arguments.
5212
5213The Common Lisp standard (as embodied in Steele's book) uses the
5214phrase ``it is an error if'' to indicate a situation which is not
5215supposed to arise in complying programs; implementations are strongly
5216encouraged but not required to signal an error in these situations.
5217This package sometimes omits such error checking in the interest of
5218compactness and efficiency. For example, @code{do} variable
5219specifiers are supposed to be lists of one, two, or three forms;
5220extra forms are ignored by this package rather than signaling a
5221syntax error. The @code{endp} function is simply a synonym for
5222@code{null} in this package. Functions taking keyword arguments
5223will accept an odd number of arguments, treating the trailing
5224keyword as if it were followed by the value @code{nil}.
5225
5226Argument lists (as processed by @code{defun*} and friends)
5227@emph{are} checked rigorously except for the minor point just
5228mentioned; in particular, keyword arguments are checked for
5229validity, and @code{&allow-other-keys} and @code{:allow-other-keys}
5230are fully implemented. Keyword validity checking is slightly
5231time consuming (though not too bad in byte-compiled code);
5232you can use @code{&allow-other-keys} to omit this check. Functions
5233defined in this package such as @code{find} and @code{member*}
5234do check their keyword arguments for validity.
5235
5236@ifinfo
5237@example
5238
5239@end example
5240@end ifinfo
5241@appendixsec Optimizing Compiler
5242
5243@noindent
5244The byte-compiler that comes with Emacs 18 normally fails to expand
5245macros that appear in top-level positions in the file (i.e., outside
5246of @code{defun}s or other enclosing forms). This would have
5247disastrous consequences to programs that used such top-level macros
5248as @code{defun*}, @code{eval-when}, and @code{defstruct}. To
5249work around this problem, the @dfn{CL} package patches the Emacs
525018 compiler to expand top-level macros. This patch will apply to
5251your own macros, too, if they are used in a top-level context.
5252The patch will not harm versions of the Emacs 18 compiler which
5253have already had a similar patch applied, nor will it affect the
5254optimizing Emacs 19 byte-compiler written by Jamie Zawinski and
5255Hallvard Furuseth. The patch is applied to the byte compiler's
5256code in Emacs' memory, @emph{not} to the @file{bytecomp.elc} file
5257stored on disk.
5258
ed4d9494
DL
5259Use of the Emacs 19 compiler is highly recommended; many of the Common
5260Lisp macros emit
6bf7aab6
DL
5261code which can be improved by optimization. In particular,
5262@code{block}s (whether explicit or implicit in constructs like
5263@code{defun*} and @code{loop}) carry a fair run-time penalty; the
5264optimizing compiler removes @code{block}s which are not actually
5265referenced by @code{return} or @code{return-from} inside the block.
5266
5267@node Common Lisp Compatibility, Old CL Compatibility, Efficiency Concerns, Top
5268@appendix Common Lisp Compatibility
5269
5270@noindent
5271Following is a list of all known incompatibilities between this
5272package and Common Lisp as documented in Steele (2nd edition).
5273
5274Certain function names, such as @code{member}, @code{assoc}, and
5275@code{floor}, were already taken by (incompatible) Emacs Lisp
5276functions; this package appends @samp{*} to the names of its
5277Common Lisp versions of these functions.
5278
5279The word @code{defun*} is required instead of @code{defun} in order
5280to use extended Common Lisp argument lists in a function. Likewise,
5281@code{defmacro*} and @code{function*} are versions of those forms
5282which understand full-featured argument lists. The @code{&whole}
5283keyword does not work in @code{defmacro} argument lists (except
5284inside recursive argument lists).
5285
5286In order to allow an efficient implementation, keyword arguments use
5287a slightly cheesy parser which may be confused if a keyword symbol
5288is passed as the @emph{value} of another keyword argument.
5289(Specifically, @code{(memq :@var{keyword} @var{rest-of-arguments})}
5290is used to scan for @code{:@var{keyword}} among the supplied
5291keyword arguments.)
5292
5293The @code{eql} and @code{equal} predicates do not distinguish
5294between IEEE floating-point plus and minus zero. The @code{equalp}
5295predicate has several differences with Common Lisp; @pxref{Predicates}.
5296
5297The @code{setf} mechanism is entirely compatible, except that
5298setf-methods return a list of five values rather than five
5299values directly. Also, the new ``@code{setf} function'' concept
5300(typified by @code{(defun (setf foo) @dots{})}) is not implemented.
5301
5302The @code{do-all-symbols} form is the same as @code{do-symbols}
5303with no @var{obarray} argument. In Common Lisp, this form would
5304iterate over all symbols in all packages. Since Emacs obarrays
5305are not a first-class package mechanism, there is no way for
5306@code{do-all-symbols} to locate any but the default obarray.
5307
5308The @code{loop} macro is complete except that @code{loop-finish}
5309and type specifiers are unimplemented.
5310
5311The multiple-value return facility treats lists as multiple
5312values, since Emacs Lisp cannot support multiple return values
5313directly. The macros will be compatible with Common Lisp if
5314@code{values} or @code{values-list} is always used to return to
5315a @code{multiple-value-bind} or other multiple-value receiver;
5316if @code{values} is used without @code{multiple-value-@dots{}}
5317or vice-versa the effect will be different from Common Lisp.
5318
5319Many Common Lisp declarations are ignored, and others match
5320the Common Lisp standard in concept but not in detail. For
5321example, local @code{special} declarations, which are purely
5322advisory in Emacs Lisp, do not rigorously obey the scoping rules
5323set down in Steele's book.
5324
5325The variable @code{*gensym-counter*} starts out with a pseudo-random
5326value rather than with zero. This is to cope with the fact that
5327generated symbols become interned when they are written to and
5328loaded back from a file.
5329
5330The @code{defstruct} facility is compatible, except that structures
5331are of type @code{:type vector :named} by default rather than some
5332special, distinct type. Also, the @code{:type} slot option is ignored.
5333
5334The second argument of @code{check-type} is treated differently.
5335
5336@node Old CL Compatibility, Porting Common Lisp, Common Lisp Compatibility, Top
5337@appendix Old CL Compatibility
5338
5339@noindent
5340Following is a list of all known incompatibilities between this package
5341and the older Quiroz @file{cl.el} package.
5342
5343This package's emulation of multiple return values in functions is
5344incompatible with that of the older package. That package attempted
5345to come as close as possible to true Common Lisp multiple return
5346values; unfortunately, it could not be 100% reliable and so was prone
5347to occasional surprises if used freely. This package uses a simpler
5348method, namely replacing multiple values with lists of values, which
5349is more predictable though more noticeably different from Common Lisp.
5350
5351The @code{defkeyword} form and @code{keywordp} function are not
5352implemented in this package.
5353
5354The @code{member}, @code{floor}, @code{ceiling}, @code{truncate},
5355@code{round}, @code{mod}, and @code{rem} functions are suffixed
5356by @samp{*} in this package to avoid collision with existing
ed4d9494 5357functions in Emacs. The older package simply
6bf7aab6
DL
5358redefined these functions, overwriting the built-in meanings and
5359causing serious portability problems with Emacs 19. (Some more
5360recent versions of the Quiroz package changed the names to
5361@code{cl-member}, etc.; this package defines the latter names as
5362aliases for @code{member*}, etc.)
5363
5364Certain functions in the old package which were buggy or inconsistent
5365with the Common Lisp standard are incompatible with the conforming
5366versions in this package. For example, @code{eql} and @code{member}
5367were synonyms for @code{eq} and @code{memq} in that package, @code{setf}
5368failed to preserve correct order of evaluation of its arguments, etc.
5369
5370Finally, unlike the older package, this package is careful to
5371prefix all of its internal names with @code{cl-}. Except for a
5372few functions which are explicitly defined as additional features
5373(such as @code{floatp-safe} and @code{letf}), this package does not
5374export any non-@samp{cl-} symbols which are not also part of Common
5375Lisp.
5376
5377@ifinfo
5378@example
5379
5380@end example
5381@end ifinfo
5382@appendixsec The @code{cl-compat} package
5383
5384@noindent
5385The @dfn{CL} package includes emulations of some features of the
5386old @file{cl.el}, in the form of a compatibility package
5387@code{cl-compat}. To use it, put @code{(require 'cl-compat)} in
5388your program.
5389
5390The old package defined a number of internal routines without
5391@code{cl-} prefixes or other annotations. Call to these routines
5392may have crept into existing Lisp code. @code{cl-compat}
5393provides emulations of the following internal routines:
5394@code{pair-with-newsyms}, @code{zip-lists}, @code{unzip-lists},
5395@code{reassemble-arglists}, @code{duplicate-symbols-p},
5396@code{safe-idiv}.
5397
5398Some @code{setf} forms translated into calls to internal
5399functions that user code might call directly. The functions
5400@code{setnth}, @code{setnthcdr}, and @code{setelt} fall in
5401this category; they are defined by @code{cl-compat}, but the
5402best fix is to change to use @code{setf} properly.
5403
5404The @code{cl-compat} file defines the keyword functions
5405@code{keywordp}, @code{keyword-of}, and @code{defkeyword},
5406which are not defined by the new @dfn{CL} package because the
5407use of keywords as data is discouraged.
5408
5409The @code{build-klist} mechanism for parsing keyword arguments
5410is emulated by @code{cl-compat}; the @code{with-keyword-args}
5411macro is not, however, and in any case it's best to change to
5412use the more natural keyword argument processing offered by
5413@code{defun*}.
5414
5415Multiple return values are treated differently by the two
5416Common Lisp packages. The old package's method was more
5417compatible with true Common Lisp, though it used heuristics
5418that caused it to report spurious multiple return values in
5419certain cases. The @code{cl-compat} package defines a set
5420of multiple-value macros that are compatible with the old
5421CL package; again, they are heuristic in nature, but they
5422are guaranteed to work in any case where the old package's
5423macros worked. To avoid name collision with the ``official''
5424multiple-value facilities, the ones in @code{cl-compat} have
5425capitalized names: @code{Values}, @code{Values-list},
5426@code{Multiple-value-bind}, etc.
5427
5428The functions @code{cl-floor}, @code{cl-ceiling}, @code{cl-truncate},
5429and @code{cl-round} are defined by @code{cl-compat} to use the
5430old-style multiple-value mechanism, just as they did in the old
5431package. The newer @code{floor*} and friends return their two
5432results in a list rather than as multiple values. Note that
5433older versions of the old package used the unadorned names
5434@code{floor}, @code{ceiling}, etc.; @code{cl-compat} cannot use
5435these names because they conflict with Emacs 19 built-ins.
5436
5437@node Porting Common Lisp, Function Index, Old CL Compatibility, Top
5438@appendix Porting Common Lisp
5439
5440@noindent
5441This package is meant to be used as an extension to Emacs Lisp,
5442not as an Emacs implementation of true Common Lisp. Some of the
5443remaining differences between Emacs Lisp and Common Lisp make it
5444difficult to port large Common Lisp applications to Emacs. For
5445one, some of the features in this package are not fully compliant
5446with ANSI or Steele; @pxref{Common Lisp Compatibility}. But there
5447are also quite a few features that this package does not provide
5448at all. Here are some major omissions that you will want watch out
5449for when bringing Common Lisp code into Emacs.
5450
5451@itemize @bullet
5452@item
5453Case-insensitivity. Symbols in Common Lisp are case-insensitive
5454by default. Some programs refer to a function or variable as
5455@code{foo} in one place and @code{Foo} or @code{FOO} in another.
5456Emacs Lisp will treat these as three distinct symbols.
5457
5458Some Common Lisp code is written entirely in upper case. While Emacs
5459is happy to let the program's own functions and variables use
5460this convention, calls to Lisp builtins like @code{if} and
5461@code{defun} will have to be changed to lower case.
5462
5463@item
5464Lexical scoping. In Common Lisp, function arguments and @code{let}
5465bindings apply only to references physically within their bodies
5466(or within macro expansions in their bodies). Emacs Lisp, by
5467contrast, uses @dfn{dynamic scoping} wherein a binding to a
5468variable is visible even inside functions called from the body.
5469
5470Variables in Common Lisp can be made dynamically scoped by
5471declaring them @code{special} or using @code{defvar}. In Emacs
5472Lisp it is as if all variables were declared @code{special}.
5473
5474Often you can use code that was written for lexical scoping
5475even in a dynamically scoped Lisp, but not always. Here is
5476an example of a Common Lisp code fragment that would fail in
5477Emacs Lisp:
5478
5479@example
5480(defun map-odd-elements (func list)
5481 (loop for x in list
5482 for flag = t then (not flag)
5483 collect (if flag x (funcall func x))))
5484
5485(defun add-odd-elements (list x)
5486 (map-odd-elements (function (lambda (a) (+ a x))) list))
5487@end example
5488
5489@noindent
5490In Common Lisp, the two functions' usages of @code{x} are completely
5491independent. In Emacs Lisp, the binding to @code{x} made by
5492@code{add-odd-elements} will have been hidden by the binding
5493in @code{map-odd-elements} by the time the @code{(+ a x)} function
5494is called.
5495
5496(This package avoids such problems in its own mapping functions
5497by using names like @code{cl-x} instead of @code{x} internally;
5498as long as you don't use the @code{cl-} prefix for your own
5499variables no collision can occur.)
5500
5501@xref{Lexical Bindings}, for a description of the @code{lexical-let}
5502form which establishes a Common Lisp-style lexical binding, and some
5503examples of how it differs from Emacs' regular @code{let}.
5504
5505@item
5506Reader macros. Common Lisp includes a second type of macro that
5507works at the level of individual characters. For example, Common
5508Lisp implements the quote notation by a reader macro called @code{'},
5509whereas Emacs Lisp's parser just treats quote as a special case.
5510Some Lisp packages use reader macros to create special syntaxes
5511for themselves, which the Emacs parser is incapable of reading.
5512
5513The lack of reader macros, incidentally, is the reason behind
5514Emacs Lisp's unusual backquote syntax. Since backquotes are
5515implemented as a Lisp package and not built-in to the Emacs
5516parser, they are forced to use a regular macro named @code{`}
5517which is used with the standard function/macro call notation.
5518
5519@item
5520Other syntactic features. Common Lisp provides a number of
5521notations beginning with @code{#} that the Emacs Lisp parser
5522won't understand. For example, @samp{#| ... |#} is an
5523alternate comment notation, and @samp{#+lucid (foo)} tells
5524the parser to ignore the @code{(foo)} except in Lucid Common
5525Lisp.
5526
5527@item
5528Packages. In Common Lisp, symbols are divided into @dfn{packages}.
5529Symbols that are Lisp built-ins are typically stored in one package;
5530symbols that are vendor extensions are put in another, and each
5531application program would have a package for its own symbols.
5532Certain symbols are ``exported'' by a package and others are
5533internal; certain packages ``use'' or import the exported symbols
5534of other packages. To access symbols that would not normally be
5535visible due to this importing and exporting, Common Lisp provides
5536a syntax like @code{package:symbol} or @code{package::symbol}.
5537
5538Emacs Lisp has a single namespace for all interned symbols, and
5539then uses a naming convention of putting a prefix like @code{cl-}
5540in front of the name. Some Emacs packages adopt the Common Lisp-like
5541convention of using @code{cl:} or @code{cl::} as the prefix.
5542However, the Emacs parser does not understand colons and just
5543treats them as part of the symbol name. Thus, while @code{mapcar}
5544and @code{lisp:mapcar} may refer to the same symbol in Common
5545Lisp, they are totally distinct in Emacs Lisp. Common Lisp
5546programs which refer to a symbol by the full name sometimes
5547and the short name other times will not port cleanly to Emacs.
5548
5549Emacs Lisp does have a concept of ``obarrays,'' which are
5550package-like collections of symbols, but this feature is not
5551strong enough to be used as a true package mechanism.
5552
5553@item
5554The @code{format} function is quite different between Common
5555Lisp and Emacs Lisp. It takes an additional ``destination''
5556argument before the format string. A destination of @code{nil}
5557means to format to a string as in Emacs Lisp; a destination
5558of @code{t} means to write to the terminal (similar to
5559@code{message} in Emacs). Also, format control strings are
5560utterly different; @code{~} is used instead of @code{%} to
5561introduce format codes, and the set of available codes is
5562much richer. There are no notations like @code{\n} for
5563string literals; instead, @code{format} is used with the
5564``newline'' format code, @code{~%}. More advanced formatting
5565codes provide such features as paragraph filling, case
5566conversion, and even loops and conditionals.
5567
5568While it would have been possible to implement most of Common
5569Lisp @code{format} in this package (under the name @code{format*},
5570of course), it was not deemed worthwhile. It would have required
5571a huge amount of code to implement even a decent subset of
5572@code{format*}, yet the functionality it would provide over
5573Emacs Lisp's @code{format} would rarely be useful.
5574
5575@item
5576Vector constants use square brackets in Emacs Lisp, but
5577@code{#(a b c)} notation in Common Lisp. To further complicate
5578matters, Emacs 19 introduces its own @code{#(} notation for
5579something entirely different---strings with properties.
5580
5581@item
5582Characters are distinct from integers in Common Lisp. The
5583notation for character constants is also different: @code{#\A}
5584instead of @code{?A}. Also, @code{string=} and @code{string-equal}
5585are synonyms in Emacs Lisp whereas the latter is case-insensitive
5586in Common Lisp.
5587
5588@item
5589Data types. Some Common Lisp data types do not exist in Emacs
5590Lisp. Rational numbers and complex numbers are not present,
5591nor are large integers (all integers are ``fixnums''). All
5592arrays are one-dimensional. There are no readtables or pathnames;
5593streams are a set of existing data types rather than a new data
5594type of their own. Hash tables, random-states, structures, and
5595packages (obarrays) are built from Lisp vectors or lists rather
5596than being distinct types.
5597
5598@item
5599The Common Lisp Object System (CLOS) is not implemented,
5600nor is the Common Lisp Condition System. However, the EIEIO package
5601from @uref{ftp://ftp.ultranet.com/pub/zappo} does implement some
5602CLOS functionality.
5603
5604@item
5605Common Lisp features that are completely redundant with Emacs
5606Lisp features of a different name generally have not been
5607implemented. For example, Common Lisp writes @code{defconstant}
5608where Emacs Lisp uses @code{defconst}. Similarly, @code{make-list}
5609takes its arguments in different ways in the two Lisps but does
5610exactly the same thing, so this package has not bothered to
5611implement a Common Lisp-style @code{make-list}.
5612
5613@item
5614A few more notable Common Lisp features not included in this
5615package: @code{compiler-let}, @code{tagbody}, @code{prog},
5616@code{ldb/dpb}, @code{parse-integer}, @code{cerror}.
5617
5618@item
5619Recursion. While recursion works in Emacs Lisp just like it
5620does in Common Lisp, various details of the Emacs Lisp system
5621and compiler make recursion much less efficient than it is in
5622most Lisps. Some schools of thought prefer to use recursion
5623in Lisp over other techniques; they would sum a list of
5624numbers using something like
5625
5626@example
5627(defun sum-list (list)
5628 (if list
5629 (+ (car list) (sum-list (cdr list)))
5630 0))
5631@end example
5632
5633@noindent
5634where a more iteratively-minded programmer might write one of
5635these forms:
5636
5637@example
5638(let ((total 0)) (dolist (x my-list) (incf total x)) total)
5639(loop for x in my-list sum x)
5640@end example
5641
5642While this would be mainly a stylistic choice in most Common Lisps,
5643in Emacs Lisp you should be aware that the iterative forms are
5644much faster than recursion. Also, Lisp programmers will want to
5645note that the current Emacs Lisp compiler does not optimize tail
5646recursion.
5647@end itemize
5648
5649@node Function Index, Variable Index, Porting Common Lisp, Top
5650@unnumbered Function Index
5651
5652@printindex fn
5653
5654@node Variable Index, , Function Index, Top
5655@unnumbered Variable Index
5656
5657@printindex vr
5658
5659@contents
5660@bye