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