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