Start updating cl.texi for cl-lib changes
* doc/misc/cl.texi: Include emacsver.texi.
Use Emacs version number rather than unchanging cl.el version number.
End all menu descriptions with a period.
Do not use @dfn{CL} for every instance of "CL".
(Overview): Remove no-runtime caveat, and note about foo* names.
(Usage): Use cl-lib rather than cl.
(Organization, Naming Conventions): Update for cl-lib.el.
(Installation): Remove long-irrelevant node.
(Program Structure, Predicates, Control Structure):
Start updating for cl-lib namespace.
* doc/misc/Makefile.in ($(buildinfodir)/cl$(INFO_EXT), cl.dvi, cl.pdf):
Depend on emacsver.texi.
This commit is contained in:
parent
49238e7f5c
commit
8d6510b95a
3 changed files with 218 additions and 227 deletions
|
|
@ -1,3 +1,19 @@
|
|||
2012-10-23 Glenn Morris <rgm@gnu.org>
|
||||
|
||||
* cl.texi: Include emacsver.texi. Use Emacs version number rather
|
||||
than unchanging cl.el version number.
|
||||
End all menu descriptions with a period.
|
||||
Do not use @dfn{CL} for every instance of "CL".
|
||||
(Overview): Remove no-runtime caveat, and note about foo* names.
|
||||
(Usage): Use cl-lib rather than cl.
|
||||
(Organization, Naming Conventions): Update for cl-lib.el.
|
||||
(Installation): Remove long-irrelevant node.
|
||||
(Program Structure, Predicates, Control Structure):
|
||||
Start updating for cl-lib namespace.
|
||||
|
||||
* Makefile.in ($(buildinfodir)/cl$(INFO_EXT), cl.dvi, cl.pdf):
|
||||
Depend on emacsver.texi.
|
||||
|
||||
2012-10-09 Michael Albinus <michael.albinus@gmx.de>
|
||||
|
||||
* trampver.texi: Update release number.
|
||||
|
|
|
|||
|
|
@ -237,12 +237,12 @@ cc-mode.pdf: ${srcdir}/cc-mode.texi
|
|||
$(ENVADD) $(TEXI2PDF) ${srcdir}/cc-mode.texi
|
||||
|
||||
cl : $(buildinfodir)/cl$(INFO_EXT)
|
||||
$(buildinfodir)/cl$(INFO_EXT): ${srcdir}/cl.texi
|
||||
$(buildinfodir)/cl$(INFO_EXT): ${srcdir}/cl.texi $(emacsdir)/emacsver.texi
|
||||
$(mkinfodir)
|
||||
$(MAKEINFO) $(MAKEINFO_OPTS) $(INFO_OPTS) -o $@ ${srcdir}/cl.texi
|
||||
cl.dvi: ${srcdir}/cl.texi
|
||||
cl.dvi: ${srcdir}/cl.texi $(emacsdir)/emacsver.texi
|
||||
$(ENVADD) $(TEXI2DVI) ${srcdir}/cl.texi
|
||||
cl.pdf: ${srcdir}/cl.texi
|
||||
cl.pdf: ${srcdir}/cl.texi $(emacsdir)/emacsver.texi
|
||||
$(ENVADD) $(TEXI2PDF) ${srcdir}/cl.texi
|
||||
|
||||
dbus : $(buildinfodir)/dbus$(INFO_EXT)
|
||||
|
|
|
|||
423
doc/misc/cl.texi
423
doc/misc/cl.texi
|
|
@ -1,6 +1,7 @@
|
|||
\input texinfo @c -*-texinfo-*-
|
||||
@setfilename ../../info/cl
|
||||
@settitle Common Lisp Extensions
|
||||
@include emacsver.texi
|
||||
|
||||
@copying
|
||||
This file documents the GNU Emacs Common Lisp emulation package.
|
||||
|
|
@ -34,7 +35,7 @@ developing GNU and promoting software freedom.''
|
|||
@sp 4
|
||||
@center For GNU Emacs Lisp
|
||||
@sp 1
|
||||
@center Version 2.02
|
||||
@center as distributed with Emacs @value{EMACSVER}
|
||||
@sp 5
|
||||
@center Dave Gillespie
|
||||
@center daveg@@synaptics.com
|
||||
|
|
@ -53,23 +54,23 @@ developing GNU and promoting software freedom.''
|
|||
@end ifnottex
|
||||
|
||||
@menu
|
||||
* Overview:: Installation, usage, etc.
|
||||
* Program Structure:: Arglists, @code{eval-when}, @code{defalias}
|
||||
* Predicates:: @code{typep} and @code{equalp}
|
||||
* Control Structure:: @code{setf}, @code{do}, @code{loop}, etc.
|
||||
* Macros:: Destructuring, @code{define-compiler-macro}
|
||||
* Declarations:: @code{proclaim}, @code{declare}, etc.
|
||||
* Symbols:: Property lists, @code{gensym}
|
||||
* Numbers:: Predicates, functions, random numbers
|
||||
* Sequences:: Mapping, functions, searching, sorting
|
||||
* Lists:: @code{caddr}, @code{sublis}, @code{member*}, @code{assoc*}, etc.
|
||||
* Structures:: @code{defstruct}
|
||||
* Assertions:: @code{check-type}, @code{assert}, @code{ignore-errors}.
|
||||
* Overview:: Basics, usage, etc.
|
||||
* Program Structure:: Arglists, @code{cl-eval-when}, @code{defalias}.
|
||||
* Predicates:: @code{cl-typep} and @code{cl-equalp}.
|
||||
* Control Structure:: @code{setf}, @code{cl-do}, @code{cl-loop}, etc.
|
||||
* Macros:: Destructuring, @code{cl-define-compiler-macro}.
|
||||
* Declarations:: @code{cl-proclaim}, @code{cl-declare}, etc.
|
||||
* Symbols:: Property lists, @code{cl-gensym}.
|
||||
* Numbers:: Predicates, functions, random numbers.
|
||||
* Sequences:: Mapping, functions, searching, sorting.
|
||||
* Lists:: @code{cl-caddr}, @code{cl-sublis}, @code{cl-member}, @code{cl-assoc}, etc.
|
||||
* Structures:: @code{cl-defstruct}.
|
||||
* Assertions:: @code{cl-check-type}, @code{cl-assert}, @code{ignore-errors}.
|
||||
|
||||
* Efficiency Concerns:: Hints and techniques
|
||||
* Common Lisp Compatibility:: All known differences with Steele
|
||||
* Old CL Compatibility:: All known differences with old cl.el
|
||||
* Porting Common Lisp:: Hints for porting Common Lisp code
|
||||
* Efficiency Concerns:: Hints and techniques.
|
||||
* Common Lisp Compatibility:: All known differences with Steele.
|
||||
* Old CL Compatibility:: All known differences with old cl.el.
|
||||
* Porting Common Lisp:: Hints for porting Common Lisp code.
|
||||
|
||||
* GNU Free Documentation License:: The license for this documentation.
|
||||
* Function Index::
|
||||
|
|
@ -92,21 +93,11 @@ As Emacs Lisp programmers have grown in number, and the applications
|
|||
they write have grown more ambitious, it has become clear that Emacs
|
||||
Lisp could benefit from many of the conveniences of Common Lisp.
|
||||
|
||||
The @dfn{CL} package adds a number of Common Lisp functions and
|
||||
The @code{CL} package adds a number of Common Lisp functions and
|
||||
control structures to Emacs Lisp. While not a 100% complete
|
||||
implementation of Common Lisp, @dfn{CL} adds enough functionality
|
||||
implementation of Common Lisp, @code{CL} adds enough functionality
|
||||
to make Emacs Lisp programming significantly more convenient.
|
||||
|
||||
@strong{Please note:} the @dfn{CL} functions are not standard parts of
|
||||
the Emacs Lisp name space, so it is legitimate for users to define
|
||||
them with other, conflicting meanings. To avoid conflicting with
|
||||
those user activities, we have a policy that packages installed in
|
||||
Emacs must not load @dfn{CL} at run time. (It is ok for them to load
|
||||
@dfn{CL} at compile time only, with @code{eval-when-compile}, and use
|
||||
the macros it provides.) If you are writing packages that you plan to
|
||||
distribute and invite widespread use for, you might want to observe
|
||||
the same rule.
|
||||
|
||||
Some Common Lisp features have been omitted from this package
|
||||
for various reasons:
|
||||
|
||||
|
|
@ -119,152 +110,131 @@ examples of this group.
|
|||
@item
|
||||
Other features cannot be implemented without modification to the
|
||||
Emacs Lisp interpreter itself, such as multiple return values,
|
||||
lexical scoping, case-insensitive symbols, and complex numbers.
|
||||
The @dfn{CL} package generally makes no attempt to emulate these
|
||||
case-insensitive symbols, and complex numbers.
|
||||
The @code{CL} package generally makes no attempt to emulate these
|
||||
features.
|
||||
|
||||
@item
|
||||
Some features conflict with existing things in Emacs Lisp. For
|
||||
example, Emacs's @code{assoc} function is incompatible with the
|
||||
Common Lisp @code{assoc}. In such cases, this package usually
|
||||
adds the suffix @samp{*} to the function name of the Common
|
||||
Lisp version of the function (e.g., @code{assoc*}).
|
||||
@end itemize
|
||||
|
||||
The package described here was written by Dave Gillespie,
|
||||
@file{daveg@@synaptics.com}. It is a total rewrite of the original
|
||||
The package described here was originally written by Dave Gillespie,
|
||||
@file{daveg@@synaptics.com}, as a total rewrite of an earlier
|
||||
1986 @file{cl.el} package by Cesar Quiroz. Most features of the
|
||||
Quiroz package have been retained; any incompatibilities are
|
||||
Quiroz package were retained; any incompatibilities are
|
||||
noted in the descriptions below. Care has been taken in this
|
||||
version to ensure that each function is defined efficiently,
|
||||
concisely, and with minimal impact on the rest of the Emacs
|
||||
environment.
|
||||
environment. Stefan Monnier added the file @file{cl-lib.el} and
|
||||
rationalized the namespace for Emacs 24.3.
|
||||
|
||||
@menu
|
||||
* Usage:: How to use the CL package
|
||||
* Organization:: The package's five component files
|
||||
* Installation:: Compiling and installing CL
|
||||
* Naming Conventions:: Notes on CL function names
|
||||
* Usage:: How to use the CL package.
|
||||
* Organization:: The package's five component files.
|
||||
* Naming Conventions:: Notes on CL function names.
|
||||
@end menu
|
||||
|
||||
@node Usage
|
||||
@section Usage
|
||||
|
||||
@noindent
|
||||
Lisp code that uses features from the @dfn{CL} package should
|
||||
include at the beginning:
|
||||
The @code{CL} package is distributed with Emacs, so there is no need
|
||||
to install any additional files in order to start using it. Lisp code
|
||||
that uses features from the @code{CL} package should simply include at
|
||||
the beginning:
|
||||
|
||||
@example
|
||||
(require 'cl)
|
||||
(require 'cl-lib)
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
It is safe to arrange to load @dfn{CL} at all times, e.g.,
|
||||
in your @file{.emacs} file. But it's a good idea, for portability,
|
||||
to @code{(require 'cl)} in your code even if you do this.
|
||||
You may wish to add such a statement to your init file, if you
|
||||
make frequent use of CL features.
|
||||
|
||||
@node Organization
|
||||
@section Organization
|
||||
|
||||
@noindent
|
||||
The Common Lisp package is organized into four files:
|
||||
The Common Lisp package is organized into four main files:
|
||||
|
||||
@table @file
|
||||
@item cl.el
|
||||
This is the ``main'' file, which contains basic functions
|
||||
and information about the package. This file is relatively
|
||||
compact---about 700 lines.
|
||||
@item cl-lib.el
|
||||
This is the main file, which contains basic functions
|
||||
and information about the package. This file is relatively compact.
|
||||
|
||||
@item cl-extra.el
|
||||
This file contains the larger, more complex or unusual functions.
|
||||
It is kept separate so that packages which only want to use Common
|
||||
Lisp fundamentals like the @code{cadr} function won't need to pay
|
||||
Lisp fundamentals like the @code{cl-incf} function won't need to pay
|
||||
the overhead of loading the more advanced functions.
|
||||
|
||||
@item cl-seq.el
|
||||
This file contains most of the advanced functions for operating
|
||||
on sequences or lists, such as @code{delete-if} and @code{assoc*}.
|
||||
on sequences or lists, such as @code{cl-delete-if} and @code{cl-assoc}.
|
||||
|
||||
@item cl-macs.el
|
||||
This file contains the features of the packages which are macros
|
||||
instead of functions. Macros expand when the caller is compiled,
|
||||
not when it is run, so the macros generally only need to be
|
||||
present when the byte-compiler is running (or when the macros are
|
||||
used in uncompiled code such as a @file{.emacs} file). Most of
|
||||
the macros of this package are isolated in @file{cl-macs.el} so
|
||||
that they won't take up memory unless you are compiling.
|
||||
This file contains the features that are macros instead of functions.
|
||||
Macros expand when the caller is compiled, not when it is run, so the
|
||||
macros generally only need to be present when the byte-compiler is
|
||||
running (or when the macros are used in uncompiled code). Most of the
|
||||
macros of this package are isolated in @file{cl-macs.el} so that they
|
||||
won't take up memory unless you are compiling.
|
||||
@end table
|
||||
|
||||
The file @file{cl.el} includes all necessary @code{autoload}
|
||||
The file @file{cl-lib.el} includes all necessary @code{autoload}
|
||||
commands for the functions and macros in the other three files.
|
||||
All you have to do is @code{(require 'cl)}, and @file{cl.el}
|
||||
All you have to do is @code{(require 'cl-lib)}, and @file{cl-lib.el}
|
||||
will take care of pulling in the other files when they are
|
||||
needed.
|
||||
|
||||
There is another file, @file{cl-compat.el}, which defines some
|
||||
routines from the older @file{cl.el} package that are not otherwise
|
||||
There is another file, @file{cl.el}, which was the main entry point
|
||||
to the CL package prior to Emacs 24.3. Nowadays, it is replaced
|
||||
by @file{cl-lib.el}. The two provide the same features, but use
|
||||
different function names (in fact, @file{cl.el} just defines aliases
|
||||
to the @file{cl-lib.el} definitions). In particular, the old @file{cl.el}
|
||||
does not use a clean namespace. For this reason, Emacs has a policy
|
||||
that packages distributed with Emacs must not load @code{cl} at run time.
|
||||
(It is ok for them to load @code{cl} at @emph{compile} time, with
|
||||
@code{eval-when-compile}, and use the macros it provides.) There is
|
||||
no such restriction on the use of @code{cl-lib}. New code should use
|
||||
@code{cl-lib} rather than @code{cl}. @xref{Naming Conventions}.
|
||||
|
||||
There is one more file, @file{cl-compat.el}, which defines some
|
||||
routines from the older CL package that are not otherwise
|
||||
present in the new package. This includes internal routines
|
||||
like @code{setelt} and @code{zip-lists}, deprecated features
|
||||
like @code{defkeyword}, and an emulation of the old-style
|
||||
multiple-values feature. This file is obsolete and should not be used
|
||||
in new code. @xref{Old CL Compatibility}.
|
||||
|
||||
@node Installation
|
||||
@section Installation
|
||||
|
||||
@noindent
|
||||
The @dfn{CL} package is distributed with Emacs, so there is no need
|
||||
to install anything.
|
||||
|
||||
If you do need to install it, just put the byte-compiled files
|
||||
@file{cl.elc}, @file{cl-extra.elc}, @file{cl-seq.elc},
|
||||
@file{cl-macs.elc}, and (if necessary) @file{cl-compat.elc} into a
|
||||
directory on your @code{load-path}. Also, format the @file{cl.texi}
|
||||
file and put the resulting Info files into a directory in your
|
||||
@code{Info-directory-list}.
|
||||
|
||||
@node Naming Conventions
|
||||
@section Naming Conventions
|
||||
|
||||
@noindent
|
||||
Except where noted, all functions defined by this package have the
|
||||
same names and calling conventions as their Common Lisp counterparts.
|
||||
|
||||
Following is a complete list of functions whose names were changed
|
||||
from Common Lisp, usually to avoid conflicts with Emacs. In each
|
||||
case, a @samp{*} has been appended to the Common Lisp name to obtain
|
||||
the Emacs name:
|
||||
|
||||
@example
|
||||
defun* defsubst* defmacro* function*
|
||||
member* assoc* rassoc* get*
|
||||
remove* delete* mapcar* sort*
|
||||
floor* ceiling* truncate* round*
|
||||
mod* rem* random*
|
||||
@end example
|
||||
same calling conventions as their Common Lisp counterparts, and
|
||||
names that are those of Common Lisp plus a @samp{cl-} prefix.
|
||||
|
||||
Internal function and variable names in the package are prefixed
|
||||
by @code{cl-}. Here is a complete list of functions @emph{not}
|
||||
prefixed by @code{cl-} which were not taken from Common Lisp:
|
||||
by @code{cl--}. Here is a complete list of functions prefixed by
|
||||
@code{cl-} that were not taken from Common Lisp:
|
||||
|
||||
@c FIXME lexical-let lexical-let*
|
||||
@example
|
||||
floatp-safe lexical-let lexical-let*
|
||||
callf callf2 letf letf*
|
||||
defsubst*
|
||||
cl-callf cl-callf2 cl-defsubst
|
||||
cl-floatp-safe cl-letf cl-letf*
|
||||
@end example
|
||||
|
||||
The following simple functions and macros are defined in @file{cl.el};
|
||||
The following simple functions and macros are defined in @file{cl-lib.el};
|
||||
they do not cause other components like @file{cl-extra} to be loaded.
|
||||
|
||||
@example
|
||||
floatp-safe endp
|
||||
evenp oddp plusp minusp
|
||||
caaar .. cddddr
|
||||
list* ldiff rest first .. tenth
|
||||
copy-list subst mapcar* [2]
|
||||
adjoin [3] acons pairlis pop [4]
|
||||
push [4] pushnew [3,4] incf [4] decf [4]
|
||||
proclaim declaim
|
||||
cl-floatp-safe cl-endp
|
||||
cl-evenp cl-oddp cl-plusp cl-minusp
|
||||
cl-caaar .. cl-cddddr
|
||||
cl-list* cl-ldiff cl-rest cl-first .. cl-tenth
|
||||
cl-copy-list cl-subst cl-mapcar [2]
|
||||
cl-adjoin [3] cl-acons cl-pairlis
|
||||
cl-pushnew [3,4] cl-incf [4] cl-decf [4]
|
||||
cl-proclaim cl-declaim
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
|
|
@ -281,13 +251,13 @@ and @code{:key} is not used.
|
|||
@chapter Program Structure
|
||||
|
||||
@noindent
|
||||
This section describes features of the @dfn{CL} package which have to
|
||||
This section describes features of the @code{CL} package that have to
|
||||
do with programs as a whole: advanced argument lists for functions,
|
||||
and the @code{eval-when} construct.
|
||||
and the @code{cl-eval-when} construct.
|
||||
|
||||
@menu
|
||||
* Argument Lists:: @code{&key}, @code{&aux}, @code{defun*}, @code{defmacro*}.
|
||||
* Time of Evaluation:: The @code{eval-when} construct.
|
||||
* Argument Lists:: @code{&key}, @code{&aux}, @code{cl-defun}, @code{cl-defmacro}.
|
||||
* Time of Evaluation:: The @code{cl-eval-when} construct.
|
||||
@end menu
|
||||
|
||||
@iftex
|
||||
|
|
@ -309,26 +279,26 @@ this package to implement Common Lisp argument lists seamlessly.
|
|||
Instead, this package defines alternates for several Lisp forms
|
||||
which you must use if you need Common Lisp argument lists.
|
||||
|
||||
@defspec defun* name arglist body...
|
||||
@defspec cl-defun name arglist body...
|
||||
This form is identical to the regular @code{defun} form, except
|
||||
that @var{arglist} is allowed to be a full Common Lisp argument
|
||||
list. Also, the function body is enclosed in an implicit block
|
||||
called @var{name}; @pxref{Blocks and Exits}.
|
||||
@end defspec
|
||||
|
||||
@defspec defsubst* name arglist body...
|
||||
This is just like @code{defun*}, except that the function that
|
||||
@defspec cl-defsubst name arglist body...
|
||||
This is just like @code{cl-defun}, except that the function that
|
||||
is defined is automatically proclaimed @code{inline}, i.e.,
|
||||
calls to it may be expanded into in-line code by the byte compiler.
|
||||
This is analogous to the @code{defsubst} form;
|
||||
@code{defsubst*} uses a different method (compiler macros) which
|
||||
@code{cl-defsubst} uses a different method (compiler macros) which
|
||||
works in all versions of Emacs, and also generates somewhat more
|
||||
efficient inline expansions. In particular, @code{defsubst*}
|
||||
efficient inline expansions. In particular, @code{cl-defsubst}
|
||||
arranges for the processing of keyword arguments, default values,
|
||||
etc., to be done at compile-time whenever possible.
|
||||
@end defspec
|
||||
|
||||
@defspec defmacro* name arglist body...
|
||||
@defspec cl-defmacro name arglist body...
|
||||
This is identical to the regular @code{defmacro} form,
|
||||
except that @var{arglist} is allowed to be a full Common Lisp
|
||||
argument list. The @code{&environment} keyword is supported as
|
||||
|
|
@ -339,19 +309,19 @@ The macro expander body is enclosed in an implicit block called
|
|||
@var{name}.
|
||||
@end defspec
|
||||
|
||||
@defspec function* symbol-or-lambda
|
||||
@defspec cl-function symbol-or-lambda
|
||||
This is identical to the regular @code{function} form,
|
||||
except that if the argument is a @code{lambda} form then that
|
||||
form may use a full Common Lisp argument list.
|
||||
@end defspec
|
||||
|
||||
Also, all forms (such as @code{defsetf} and @code{flet}) defined
|
||||
Also, all forms (such as @code{cl-flet} and @code{cl-labels}) defined
|
||||
in this package that include @var{arglist}s in their syntax allow
|
||||
full Common Lisp argument lists.
|
||||
|
||||
Note that it is @emph{not} necessary to use @code{defun*} in
|
||||
order to have access to most @dfn{CL} features in your function.
|
||||
These features are always present; @code{defun*}'s only
|
||||
Note that it is @emph{not} necessary to use @code{cl-defun} in
|
||||
order to have access to most @code{CL} features in your function.
|
||||
These features are always present; @code{cl-defun}'s only
|
||||
difference from @code{defun} is its more flexible argument
|
||||
lists and its implicit block.
|
||||
|
||||
|
|
@ -401,7 +371,7 @@ are optional arguments which are specified by name rather than
|
|||
positionally in the argument list. For example,
|
||||
|
||||
@example
|
||||
(defun* foo (a &optional b &key c d (e 17)))
|
||||
(cl-defun foo (a &optional b &key c d (e 17)))
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
|
|
@ -427,7 +397,7 @@ You can also explicitly specify the keyword argument; it need not be
|
|||
simply the variable name prefixed with a colon. For example,
|
||||
|
||||
@example
|
||||
(defun* bar (&key (a 1) ((baz b) 4)))
|
||||
(cl-defun bar (&key (a 1) ((baz b) 4)))
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
|
|
@ -453,16 +423,16 @@ the ``rest'' argument is bound to the keyword list as it appears
|
|||
in the call. For example:
|
||||
|
||||
@smallexample
|
||||
(defun* find-thing (thing &rest rest &key need &allow-other-keys)
|
||||
(or (apply 'member* thing thing-list :allow-other-keys t rest)
|
||||
(cl-defun find-thing (thing &rest rest &key need &allow-other-keys)
|
||||
(or (apply 'cl-member thing thing-list :allow-other-keys t rest)
|
||||
(if need (error "Thing not found"))))
|
||||
@end smallexample
|
||||
|
||||
@noindent
|
||||
This function takes a @code{:need} keyword argument, but also
|
||||
accepts other keyword arguments which are passed on to the
|
||||
@code{member*} function. @code{allow-other-keys} is used to
|
||||
keep both @code{find-thing} and @code{member*} from complaining
|
||||
@code{cl-member} function. @code{allow-other-keys} is used to
|
||||
keep both @code{find-thing} and @code{cl-member} from complaining
|
||||
about each others' keywords in the arguments.
|
||||
|
||||
The fifth section of the argument list consists of @dfn{auxiliary
|
||||
|
|
@ -473,17 +443,17 @@ difference between the following two functions, except for a
|
|||
matter of stylistic taste:
|
||||
|
||||
@example
|
||||
(defun* foo (a b &aux (c (+ a b)) d)
|
||||
(cl-defun foo (a b &aux (c (+ a b)) d)
|
||||
@var{body})
|
||||
|
||||
(defun* foo (a b)
|
||||
(cl-defun foo (a b)
|
||||
(let ((c (+ a b)) d)
|
||||
@var{body}))
|
||||
@end example
|
||||
|
||||
Argument lists support @dfn{destructuring}. In Common Lisp,
|
||||
destructuring is only allowed with @code{defmacro}; this package
|
||||
allows it with @code{defun*} and other argument lists as well.
|
||||
allows it with @code{cl-defun} and other argument lists as well.
|
||||
In destructuring, any argument variable (@var{var} in the above
|
||||
diagram) can be replaced by a list of variables, or more generally,
|
||||
a recursive argument list. The corresponding argument value must
|
||||
|
|
@ -491,7 +461,7 @@ be a list whose elements match this recursive argument list.
|
|||
For example:
|
||||
|
||||
@example
|
||||
(defmacro* dolist ((var listform &optional resultform)
|
||||
(cl-defmacro dolist ((var listform &optional resultform)
|
||||
&rest body)
|
||||
...)
|
||||
@end example
|
||||
|
|
@ -532,21 +502,21 @@ For example, the compiler effectively evaluates @code{defmacro} forms
|
|||
at compile-time so that later parts of the file can refer to the
|
||||
macros that are defined.
|
||||
|
||||
@defspec eval-when (situations...) forms...
|
||||
@defspec cl-eval-when (situations...) forms...
|
||||
This form controls when the body @var{forms} are evaluated.
|
||||
The @var{situations} list may contain any set of the symbols
|
||||
@code{compile}, @code{load}, and @code{eval} (or their long-winded
|
||||
ANSI equivalents, @code{:compile-toplevel}, @code{:load-toplevel},
|
||||
and @code{:execute}).
|
||||
|
||||
The @code{eval-when} form is handled differently depending on
|
||||
The @code{cl-eval-when} form is handled differently depending on
|
||||
whether or not it is being compiled as a top-level form.
|
||||
Specifically, it gets special treatment if it is being compiled
|
||||
by a command such as @code{byte-compile-file} which compiles files
|
||||
or buffers of code, and it appears either literally at the
|
||||
top level of the file or inside a top-level @code{progn}.
|
||||
|
||||
For compiled top-level @code{eval-when}s, the body @var{forms} are
|
||||
For compiled top-level @code{cl-eval-when}s, the body @var{forms} are
|
||||
executed at compile-time if @code{compile} is in the @var{situations}
|
||||
list, and the @var{forms} are written out to the file (to be executed
|
||||
at load-time) if @code{load} is in the @var{situations} list.
|
||||
|
|
@ -554,11 +524,11 @@ at load-time) if @code{load} is in the @var{situations} list.
|
|||
For non-compiled-top-level forms, only the @code{eval} situation is
|
||||
relevant. (This includes forms executed by the interpreter, forms
|
||||
compiled with @code{byte-compile} rather than @code{byte-compile-file},
|
||||
and non-top-level forms.) The @code{eval-when} acts like a
|
||||
and non-top-level forms.) The @code{cl-eval-when} acts like a
|
||||
@code{progn} if @code{eval} is specified, and like @code{nil}
|
||||
(ignoring the body @var{forms}) if not.
|
||||
|
||||
The rules become more subtle when @code{eval-when}s are nested;
|
||||
The rules become more subtle when @code{cl-eval-when}s are nested;
|
||||
consult Steele (second edition) for the gruesome details (and
|
||||
some gruesome examples).
|
||||
|
||||
|
|
@ -566,13 +536,13 @@ Some simple examples:
|
|||
|
||||
@example
|
||||
;; Top-level forms in foo.el:
|
||||
(eval-when (compile) (setq foo1 'bar))
|
||||
(eval-when (load) (setq foo2 'bar))
|
||||
(eval-when (compile load) (setq foo3 'bar))
|
||||
(eval-when (eval) (setq foo4 'bar))
|
||||
(eval-when (eval compile) (setq foo5 'bar))
|
||||
(eval-when (eval load) (setq foo6 'bar))
|
||||
(eval-when (eval compile load) (setq foo7 'bar))
|
||||
(cl-eval-when (compile) (setq foo1 'bar))
|
||||
(cl-eval-when (load) (setq foo2 'bar))
|
||||
(cl-eval-when (compile load) (setq foo3 'bar))
|
||||
(cl-eval-when (eval) (setq foo4 'bar))
|
||||
(cl-eval-when (eval compile) (setq foo5 'bar))
|
||||
(cl-eval-when (eval load) (setq foo6 'bar))
|
||||
(cl-eval-when (eval compile load) (setq foo7 'bar))
|
||||
@end example
|
||||
|
||||
When @file{foo.el} is compiled, these variables will be set during
|
||||
|
|
@ -595,18 +565,18 @@ be set:
|
|||
foo4 foo5 foo6 foo7 ; `eval'
|
||||
@end example
|
||||
|
||||
If these seven @code{eval-when}s had been, say, inside a @code{defun},
|
||||
If these seven @code{cl-eval-when}s had been, say, inside a @code{defun},
|
||||
then the first three would have been equivalent to @code{nil} and the
|
||||
last four would have been equivalent to the corresponding @code{setq}s.
|
||||
|
||||
Note that @code{(eval-when (load eval) @dots{})} is equivalent
|
||||
Note that @code{(cl-eval-when (load eval) @dots{})} is equivalent
|
||||
to @code{(progn @dots{})} in all contexts. The compiler treats
|
||||
certain top-level forms, like @code{defmacro} (sort-of) and
|
||||
@code{require}, as if they were wrapped in @code{(eval-when
|
||||
(compile load eval) @dots{})}.
|
||||
@end defspec
|
||||
|
||||
Emacs includes two special forms related to @code{eval-when}.
|
||||
Emacs includes two special forms related to @code{cl-eval-when}.
|
||||
One of these, @code{eval-when-compile}, is not quite equivalent to
|
||||
any @code{eval-when} construct and is described below.
|
||||
|
||||
|
|
@ -625,7 +595,7 @@ or other reasons.
|
|||
This form is similar to the @samp{#.} syntax of true Common Lisp.
|
||||
@end defspec
|
||||
|
||||
@defspec load-time-value form
|
||||
@defspec cl-load-time-value form
|
||||
The @var{form} is evaluated at load-time; at execution time,
|
||||
this form acts like a quoted constant of the resulting value.
|
||||
|
||||
|
|
@ -633,12 +603,12 @@ Early Common Lisp had a @samp{#,} syntax that was similar to
|
|||
this, but ANSI Common Lisp replaced it with @code{load-time-value}
|
||||
and gave it more well-defined semantics.
|
||||
|
||||
In a compiled file, @code{load-time-value} arranges for @var{form}
|
||||
In a compiled file, @code{cl-load-time-value} arranges for @var{form}
|
||||
to be evaluated when the @file{.elc} file is loaded and then used
|
||||
as if it were a quoted constant. In code compiled by
|
||||
@code{byte-compile} rather than @code{byte-compile-file}, the
|
||||
effect is identical to @code{eval-when-compile}. In uncompiled
|
||||
code, both @code{eval-when-compile} and @code{load-time-value}
|
||||
code, both @code{eval-when-compile} and @code{cl-load-time-value}
|
||||
act exactly like @code{progn}.
|
||||
|
||||
@example
|
||||
|
|
@ -649,7 +619,7 @@ act exactly like @code{progn}.
|
|||
(eval-when-compile (current-time-string))
|
||||
;; or '#.(current-time-string) in real Common Lisp
|
||||
", and loaded on: "
|
||||
(load-time-value (current-time-string))))
|
||||
(cl-load-time-value (current-time-string))))
|
||||
@end example
|
||||
|
||||
@noindent
|
||||
|
|
@ -676,21 +646,21 @@ This section describes functions for testing whether various
|
|||
facts are true or false.
|
||||
|
||||
@menu
|
||||
* Type Predicates:: @code{typep}, @code{deftype}, and @code{coerce}
|
||||
* Equality Predicates:: @code{equalp}
|
||||
* Type Predicates:: @code{cl-typep}, @code{cl-deftype}, and @code{cl-coerce}.
|
||||
* Equality Predicates:: @code{cl-equalp}.
|
||||
@end menu
|
||||
|
||||
@node Type Predicates
|
||||
@section Type Predicates
|
||||
|
||||
@noindent
|
||||
The @dfn{CL} package defines a version of the Common Lisp @code{typep}
|
||||
The @code{CL} package defines a version of the Common Lisp @code{typep}
|
||||
predicate.
|
||||
|
||||
@defun typep object type
|
||||
@defun cl-typep object type
|
||||
Check if @var{object} is of type @var{type}, where @var{type} is a
|
||||
(quoted) type name of the sort used by Common Lisp. For example,
|
||||
@code{(typep foo 'integer)} is equivalent to @code{(integerp foo)}.
|
||||
@code{(cl-typep foo 'integer)} is equivalent to @code{(integerp foo)}.
|
||||
@end defun
|
||||
|
||||
The @var{type} argument to the above function is either a symbol
|
||||
|
|
@ -705,18 +675,18 @@ than @samp{-p} are used when appropriate.)
|
|||
|
||||
@item
|
||||
The type symbol @code{t} stands for the union of all types.
|
||||
@code{(typep @var{object} t)} is always true. Likewise, the
|
||||
@code{(cl-typep @var{object} t)} is always true. Likewise, the
|
||||
type symbol @code{nil} stands for nothing at all, and
|
||||
@code{(typep @var{object} nil)} is always false.
|
||||
@code{(cl-typep @var{object} nil)} is always false.
|
||||
|
||||
@item
|
||||
The type symbol @code{null} represents the symbol @code{nil}.
|
||||
Thus @code{(typep @var{object} 'null)} is equivalent to
|
||||
Thus @code{(cl-typep @var{object} 'null)} is equivalent to
|
||||
@code{(null @var{object})}.
|
||||
|
||||
@item
|
||||
The type symbol @code{atom} represents all objects that are not cons
|
||||
cells. Thus @code{(typep @var{object} 'atom)} is equivalent to
|
||||
cells. Thus @code{(cl-typep @var{object} 'atom)} is equivalent to
|
||||
@code{(atom @var{object})}.
|
||||
|
||||
@item
|
||||
|
|
@ -728,7 +698,7 @@ The type symbols @code{character} and @code{string-char} match
|
|||
integers in the range from 0 to 255.
|
||||
|
||||
@item
|
||||
The type symbol @code{float} uses the @code{floatp-safe} predicate
|
||||
The type symbol @code{float} uses the @code{cl-floatp-safe} predicate
|
||||
defined by this package rather than @code{floatp}, so it will work
|
||||
correctly even in Emacs versions without floating-point support.
|
||||
|
||||
|
|
@ -750,7 +720,7 @@ combinations of types. For example, @code{(or integer (float 0 *))}
|
|||
represents all objects that are integers or non-negative floats.
|
||||
|
||||
@item
|
||||
Lists beginning with @code{member} or @code{member*} represent
|
||||
Lists beginning with @code{member} or @code{cl-member} represent
|
||||
objects @code{eql} to any of the following values. For example,
|
||||
@code{(member 1 2 3 4)} is equivalent to @code{(integer 1 4)},
|
||||
and @code{(member nil)} is equivalent to @code{null}.
|
||||
|
|
@ -762,9 +732,9 @@ with that object as an argument.
|
|||
@end itemize
|
||||
|
||||
The following function and macro (not technically predicates) are
|
||||
related to @code{typep}.
|
||||
related to @code{cl-typep}.
|
||||
|
||||
@defun coerce object type
|
||||
@defun cl-coerce object type
|
||||
This function attempts to convert @var{object} to the specified
|
||||
@var{type}. If @var{object} is already of that type as determined by
|
||||
@code{typep}, it is simply returned. Otherwise, certain types of
|
||||
|
|
@ -774,28 +744,28 @@ converted to that type if possible. If @var{type} is
|
|||
@code{character}, then strings of length one and symbols with
|
||||
one-character names can be coerced. If @var{type} is @code{float},
|
||||
then integers can be coerced in versions of Emacs that support
|
||||
floats. In all other circumstances, @code{coerce} signals an
|
||||
floats. In all other circumstances, @code{cl-coerce} signals an
|
||||
error.
|
||||
@end defun
|
||||
|
||||
@defspec deftype name arglist forms...
|
||||
@defspec cl-deftype name arglist forms...
|
||||
This macro defines a new type called @var{name}. It is similar
|
||||
to @code{defmacro} in many ways; when @var{name} is encountered
|
||||
as a type name, the body @var{forms} are evaluated and should
|
||||
return a type specifier that is equivalent to the type. The
|
||||
@var{arglist} is a Common Lisp argument list of the sort accepted
|
||||
by @code{defmacro*}. The type specifier @samp{(@var{name} @var{args}...)}
|
||||
by @code{cl-defmacro}. The type specifier @samp{(@var{name} @var{args}...)}
|
||||
is expanded by calling the expander with those arguments; the type
|
||||
symbol @samp{@var{name}} is expanded by calling the expander with
|
||||
no arguments. The @var{arglist} is processed the same as for
|
||||
@code{defmacro*} except that optional arguments without explicit
|
||||
@code{cl-defmacro} except that optional arguments without explicit
|
||||
defaults use @code{*} instead of @code{nil} as the ``default''
|
||||
default. Some examples:
|
||||
|
||||
@example
|
||||
(deftype null () '(satisfies null)) ; predefined
|
||||
(deftype list () '(or null cons)) ; predefined
|
||||
(deftype unsigned-byte (&optional bits)
|
||||
(cl-deftype null () '(satisfies null)) ; predefined
|
||||
(cl-deftype list () '(or null cons)) ; predefined
|
||||
(cl-deftype unsigned-byte (&optional bits)
|
||||
(list 'integer 0 (if (eq bits '*) bits (1- (lsh 1 bits)))))
|
||||
(unsigned-byte 8) @equiv{} (integer 0 255)
|
||||
(unsigned-byte) @equiv{} (integer 0 *)
|
||||
|
|
@ -808,21 +778,21 @@ type specifier could be implemented if desired; this package does
|
|||
not implement @code{unsigned-byte} by default.
|
||||
@end defspec
|
||||
|
||||
The @code{typecase} and @code{check-type} macros also use type
|
||||
names. @xref{Conditionals}. @xref{Assertions}. The @code{map},
|
||||
@code{concatenate}, and @code{merge} functions take type-name
|
||||
The @code{cl-typecase} and @code{cl-check-type} macros also use type
|
||||
names. @xref{Conditionals}. @xref{Assertions}. The @code{cl-map},
|
||||
@code{cl-concatenate}, and @code{cl-merge} functions take type-name
|
||||
arguments to specify the type of sequence to return. @xref{Sequences}.
|
||||
|
||||
@node Equality Predicates
|
||||
@section Equality Predicates
|
||||
|
||||
@noindent
|
||||
This package defines the Common Lisp predicate @code{equalp}.
|
||||
This package defines the Common Lisp predicate @code{cl-equalp}.
|
||||
|
||||
@defun equalp a b
|
||||
@defun cl-equalp a b
|
||||
This function is a more flexible version of @code{equal}. In
|
||||
particular, it compares strings case-insensitively, and it compares
|
||||
numbers without regard to type (so that @code{(equalp 3 3.0)} is
|
||||
numbers without regard to type (so that @code{(cl-equalp 3 3.0)} is
|
||||
true). Vectors and conses are compared recursively. All other
|
||||
objects are compared as if by @code{equal}.
|
||||
|
||||
|
|
@ -831,15 +801,15 @@ respects. First, Common Lisp's @code{equalp} also compares
|
|||
@emph{characters} case-insensitively, which would be impractical
|
||||
in this package since Emacs does not distinguish between integers
|
||||
and characters. In keeping with the idea that strings are less
|
||||
vector-like in Emacs Lisp, this package's @code{equalp} also will
|
||||
vector-like in Emacs Lisp, this package's @code{cl-equalp} also will
|
||||
not compare strings against vectors of integers.
|
||||
@end defun
|
||||
|
||||
Also note that the Common Lisp functions @code{member} and @code{assoc}
|
||||
use @code{eql} to compare elements, whereas Emacs Lisp follows the
|
||||
MacLisp tradition and uses @code{equal} for these two functions.
|
||||
In Emacs, use @code{member*} and @code{assoc*} to get functions
|
||||
which use @code{eql} for comparisons.
|
||||
In Emacs, use @code{memq} (or @code{cl-member}) and @code{assq} (or
|
||||
@code{cl-assoc}) to get functions which use @code{eql} for comparisons.
|
||||
|
||||
@node Control Structure
|
||||
@chapter Control Structure
|
||||
|
|
@ -847,28 +817,32 @@ which use @code{eql} for comparisons.
|
|||
@noindent
|
||||
The features described in the following sections implement
|
||||
various advanced control structures, including the powerful
|
||||
@c FIXME setf is now in gv.el, not cl.
|
||||
@code{setf} facility and a number of looping and conditional
|
||||
constructs.
|
||||
|
||||
@c FIXME setf, push are standard now.
|
||||
@c lexical-let is obsolete; flet is not cl-flet.
|
||||
@c values is not cl-values.
|
||||
@menu
|
||||
* Assignment:: The @code{psetq} form
|
||||
* Generalized Variables:: @code{setf}, @code{incf}, @code{push}, etc.
|
||||
* Variable Bindings:: @code{progv}, @code{lexical-let}, @code{flet}, @code{macrolet}
|
||||
* Conditionals:: @code{case}, @code{typecase}
|
||||
* Blocks and Exits:: @code{block}, @code{return}, @code{return-from}
|
||||
* Iteration:: @code{do}, @code{dotimes}, @code{dolist}, @code{do-symbols}
|
||||
* Loop Facility:: The Common Lisp @code{loop} macro
|
||||
* Multiple Values:: @code{values}, @code{multiple-value-bind}, etc.
|
||||
* Assignment:: The @code{cl-psetq} form.
|
||||
* Generalized Variables:: @code{setf}, @code{cl-incf}, @code{push}, etc.
|
||||
* Variable Bindings:: @code{cl-progv}, @code{lexical-let}, @code{flet}, @code{cl-macrolet}.
|
||||
* Conditionals:: @code{cl-case}, @code{cl-typecase}.
|
||||
* Blocks and Exits:: @code{cl-block}, @code{cl-return}, @code{cl-return-from}.
|
||||
* Iteration:: @code{cl-do}, @code{cl-dotimes}, @code{cl-dolist}, @code{cl-do-symbols}.
|
||||
* Loop Facility:: The Common Lisp @code{cl-loop} macro.
|
||||
* Multiple Values:: @code{values}, @code{cl-multiple-value-bind}, etc.
|
||||
@end menu
|
||||
|
||||
@node Assignment
|
||||
@section Assignment
|
||||
|
||||
@noindent
|
||||
The @code{psetq} form is just like @code{setq}, except that multiple
|
||||
The @code{cl-psetq} form is just like @code{setq}, except that multiple
|
||||
assignments are done in parallel rather than sequentially.
|
||||
|
||||
@defspec psetq [symbol form]@dots{}
|
||||
@defspec cl-psetq [symbol form]@dots{}
|
||||
This special form (actually a macro) is used to assign to several
|
||||
variables simultaneously. Given only one @var{symbol} and @var{form},
|
||||
it has the same effect as @code{setq}. Given several @var{symbol}
|
||||
|
|
@ -883,21 +857,22 @@ x
|
|||
y ; @r{@code{y} was computed after @code{x} was set.}
|
||||
@result{} 15
|
||||
(setq x 2 y 3)
|
||||
(psetq x (+ x y) y (* x y))
|
||||
(cl-psetq x (+ x y) y (* x y))
|
||||
x
|
||||
@result{} 5
|
||||
y ; @r{@code{y} was computed before @code{x} was set.}
|
||||
@result{} 6
|
||||
@end example
|
||||
|
||||
The simplest use of @code{psetq} is @code{(psetq x y y x)}, which
|
||||
exchanges the values of two variables. (The @code{rotatef} form
|
||||
The simplest use of @code{cl-psetq} is @code{(cl-psetq x y y x)}, which
|
||||
exchanges the values of two variables. (The @code{cl-rotatef} form
|
||||
provides an even more convenient way to swap two variables;
|
||||
@pxref{Modify Macros}.)
|
||||
|
||||
@code{psetq} always returns @code{nil}.
|
||||
@code{cl-psetq} always returns @code{nil}.
|
||||
@end defspec
|
||||
|
||||
@c FIXME now in gv.el.
|
||||
@node Generalized Variables
|
||||
@section Generalized Variables
|
||||
|
||||
|
|
@ -922,9 +897,9 @@ Just as certain forms like @code{a[i]} can be lvalues in C, there
|
|||
is a set of forms that can be generalized variables in Lisp.
|
||||
|
||||
@menu
|
||||
* Basic Setf:: @code{setf} and place forms
|
||||
* Modify Macros:: @code{incf}, @code{push}, @code{rotatef}, @code{letf}, @code{callf}, etc.
|
||||
* Customizing Setf:: @code{define-modify-macro}, @code{defsetf}, @code{define-setf-method}
|
||||
* Basic Setf:: @code{setf} and place forms.
|
||||
* Modify Macros:: @code{cl-incf}, @code{push}, @code{cl-rotatef}, @code{letf}, @code{cl-callf}, etc.
|
||||
* Customizing Setf:: @code{define-modify-macro}, @code{defsetf}, @code{define-setf-method}.
|
||||
@end menu
|
||||
|
||||
@node Basic Setf
|
||||
|
|
@ -1107,7 +1082,7 @@ that operate on generalized variables. Many are interesting and
|
|||
useful even when the @var{place} is just a variable name.
|
||||
|
||||
@defspec psetf [place form]@dots{}
|
||||
This macro is to @code{setf} what @code{psetq} is to @code{setq}:
|
||||
This macro is to @code{setf} what @code{cl-psetq} is to @code{setq}:
|
||||
When several @var{place}s and @var{form}s are involved, the
|
||||
assignments take place in parallel rather than sequentially.
|
||||
Specifically, all subforms are evaluated from left to right, then
|
||||
|
|
@ -1533,10 +1508,10 @@ analogous to Lisp's built-in @code{let} form.
|
|||
are also related to variable bindings.
|
||||
|
||||
@menu
|
||||
* Dynamic Bindings:: The @code{progv} form
|
||||
* Lexical Bindings:: @code{lexical-let} and lexical closures
|
||||
* Function Bindings:: @code{flet} and @code{labels}
|
||||
* Macro Bindings:: @code{macrolet} and @code{symbol-macrolet}
|
||||
* Dynamic Bindings:: The @code{progv} form.
|
||||
* Lexical Bindings:: @code{lexical-let} and lexical closures.
|
||||
* Function Bindings:: @code{flet} and @code{labels}.
|
||||
* Macro Bindings:: @code{macrolet} and @code{symbol-macrolet}.
|
||||
@end menu
|
||||
|
||||
@node Dynamic Bindings
|
||||
|
|
@ -1563,7 +1538,7 @@ are ignored.
|
|||
@subsection Lexical Bindings
|
||||
|
||||
@noindent
|
||||
The @dfn{CL} package defines the following macro which
|
||||
The @code{CL} package defines the following macro which
|
||||
more closely follows the Common Lisp @code{let} form:
|
||||
|
||||
@defspec lexical-let (bindings@dots{}) forms@dots{}
|
||||
|
|
@ -1984,7 +1959,7 @@ looping constructs to complement Emacs Lisp's basic @code{while}
|
|||
loop.
|
||||
|
||||
@defspec loop forms@dots{}
|
||||
The @dfn{CL} package supports both the simple, old-style meaning of
|
||||
The @code{CL} package supports both the simple, old-style meaning of
|
||||
@code{loop} and the extremely powerful and flexible feature known as
|
||||
the @dfn{Loop Facility} or @dfn{Loop Macro}. This more advanced
|
||||
facility is discussed in the following section; @pxref{Loop Facility}.
|
||||
|
|
@ -2026,7 +2001,7 @@ associated @var{init} value as if by a @code{let} form. Then, in
|
|||
each iteration of the loop, the @var{end-test} is evaluated; if
|
||||
true, the loop is finished. Otherwise, the body @var{forms} are
|
||||
evaluated, then each @var{var} is set to the associated @var{step}
|
||||
expression (as if by a @code{psetq} form) and the next iteration
|
||||
expression (as if by a @code{cl-psetq} form) and the next iteration
|
||||
begins. Once the @var{end-test} becomes true, the @var{result}
|
||||
forms are evaluated (with the @var{var}s still bound to their
|
||||
values) to produce the result returned by @code{do}.
|
||||
|
|
@ -2065,7 +2040,7 @@ the rest of the loop.
|
|||
This is to @code{do} what @code{let*} is to @code{let}. In
|
||||
particular, the initial values are bound as if by @code{let*}
|
||||
rather than @code{let}, and the steps are assigned as if by
|
||||
@code{setq} rather than @code{psetq}.
|
||||
@code{setq} rather than @code{cl-psetq}.
|
||||
|
||||
Here is another way to write the above loop:
|
||||
|
||||
|
|
@ -2133,12 +2108,12 @@ construct called the ``Loop Facility'' or ``@code{loop} macro,''
|
|||
with an easy-to-use but very powerful and expressive syntax.
|
||||
|
||||
@menu
|
||||
* Loop Basics:: @code{loop} macro, basic clause structure
|
||||
* Loop Examples:: Working examples of @code{loop} macro
|
||||
* For Clauses:: Clauses introduced by @code{for} or @code{as}
|
||||
* Loop Basics:: @code{loop} macro, basic clause structure.
|
||||
* Loop Examples:: Working examples of @code{loop} macro.
|
||||
* For Clauses:: Clauses introduced by @code{for} or @code{as}.
|
||||
* Iteration Clauses:: @code{repeat}, @code{while}, @code{thereis}, etc.
|
||||
* Accumulation Clauses:: @code{collect}, @code{sum}, @code{maximize}, etc.
|
||||
* Other Clauses:: @code{with}, @code{if}, @code{initially}, @code{finally}
|
||||
* Other Clauses:: @code{with}, @code{if}, @code{initially}, @code{finally}.
|
||||
@end menu
|
||||
|
||||
@node Loop Basics
|
||||
|
|
@ -2546,7 +2521,7 @@ If you include several @code{for} clauses in a row, they are
|
|||
treated sequentially (as if by @code{let*} and @code{setq}).
|
||||
You can instead use the word @code{and} to link the clauses,
|
||||
in which case they are processed in parallel (as if by @code{let}
|
||||
and @code{psetq}).
|
||||
and @code{cl-psetq}).
|
||||
|
||||
@example
|
||||
(loop for x below 5 for y = nil then x collect (list x y))
|
||||
|
|
@ -3177,8 +3152,8 @@ This package defines several symbol-related features that were
|
|||
missing from Emacs Lisp.
|
||||
|
||||
@menu
|
||||
* Property Lists:: @code{get*}, @code{remprop}, @code{getf}, @code{remf}
|
||||
* Creating Symbols:: @code{gensym}, @code{gentemp}
|
||||
* Property Lists:: @code{get*}, @code{remprop}, @code{getf}, @code{remf}.
|
||||
* Creating Symbols:: @code{gensym}, @code{gentemp}.
|
||||
@end menu
|
||||
|
||||
@node Property Lists
|
||||
|
|
@ -3321,8 +3296,8 @@ which were left out of Emacs Lisp.
|
|||
@menu
|
||||
* Predicates on Numbers:: @code{plusp}, @code{oddp}, @code{floatp-safe}, etc.
|
||||
* Numerical Functions:: @code{abs}, @code{floor*}, etc.
|
||||
* Random Numbers:: @code{random*}, @code{make-random-state}
|
||||
* Implementation Parameters:: @code{most-positive-float}
|
||||
* Random Numbers:: @code{random*}, @code{make-random-state}.
|
||||
* Implementation Parameters:: @code{most-positive-float}.
|
||||
@end menu
|
||||
|
||||
@iftex
|
||||
|
|
@ -3614,11 +3589,11 @@ Emacs Lisp includes a few of these, notably @code{elt} and
|
|||
@code{length}; this package defines most of the rest.
|
||||
|
||||
@menu
|
||||
* Sequence Basics:: Arguments shared by all sequence functions
|
||||
* Sequence Basics:: Arguments shared by all sequence functions.
|
||||
* Mapping over Sequences:: @code{mapcar*}, @code{mapcan}, @code{map}, @code{every}, etc.
|
||||
* Sequence Functions:: @code{subseq}, @code{remove*}, @code{substitute}, etc.
|
||||
* Searching Sequences:: @code{find}, @code{position}, @code{count}, @code{search}, etc.
|
||||
* Sorting Sequences:: @code{sort*}, @code{stable-sort}, @code{merge}
|
||||
* Sorting Sequences:: @code{sort*}, @code{stable-sort}, @code{merge}.
|
||||
@end menu
|
||||
|
||||
@node Sequence Basics
|
||||
|
|
@ -4101,7 +4076,7 @@ The functions described here operate on lists.
|
|||
* List Functions:: @code{caddr}, @code{first}, @code{list*}, etc.
|
||||
* Substitution of Expressions:: @code{subst}, @code{sublis}, etc.
|
||||
* Lists as Sets:: @code{member*}, @code{adjoin}, @code{union}, etc.
|
||||
* Association Lists:: @code{assoc*}, @code{rassoc*}, @code{acons}, @code{pairlis}
|
||||
* Association Lists:: @code{assoc*}, @code{rassoc*}, @code{acons}, @code{pairlis}.
|
||||
@end menu
|
||||
|
||||
@node List Functions
|
||||
|
|
@ -5045,7 +5020,7 @@ Lisp.
|
|||
@appendixsec The @code{cl-compat} package
|
||||
|
||||
@noindent
|
||||
The @dfn{CL} package includes emulations of some features of the
|
||||
The @code{CL} package includes emulations of some features of the
|
||||
old @file{cl.el}, in the form of a compatibility package
|
||||
@code{cl-compat}. This file is obsolete and may be removed in future,
|
||||
so it should not be used in new code.
|
||||
|
|
@ -5066,7 +5041,7 @@ best fix is to change to use @code{setf} properly.
|
|||
|
||||
The @code{cl-compat} file defines the keyword functions
|
||||
@code{keywordp}, @code{keyword-of}, and @code{defkeyword},
|
||||
which are not defined by the new @dfn{CL} package because the
|
||||
which are not defined by the new @code{CL} package because the
|
||||
use of keywords as data is discouraged.
|
||||
|
||||
The @code{build-klist} mechanism for parsing keyword arguments
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue