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