Merge r21-4-11-chise-0_20-=ucs.
[chise/xemacs-chise.git.1] / info / cl.info-1
diff --git a/info/cl.info-1 b/info/cl.info-1
deleted file mode 100644 (file)
index cc97278..0000000
+++ /dev/null
@@ -1,1039 +0,0 @@
-This is Info file ../info/cl.info, produced by Makeinfo version 1.68
-from the input file cl.texi.
-
-INFO-DIR-SECTION XEmacs Editor
-START-INFO-DIR-ENTRY
-* Common Lisp: (cl).           GNU Emacs Common Lisp emulation package.
-END-INFO-DIR-ENTRY
-
-   This file documents the GNU Emacs Common Lisp emulation package.
-
-   Copyright (C) 1993 Free Software Foundation, Inc.
-
-   Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-   Permission is granted to copy and distribute modified versions of
-this manual under the conditions for verbatim copying, provided also
-that the section entitled "GNU General Public License" is included
-exactly as in the original, and provided that the entire resulting
-derived work is distributed under the terms of a permission notice
-identical to this one.
-
-   Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that the section entitled "GNU General Public License"
-may be included in a translation approved by the author instead of in
-the original English.
-
-\1f
-File: cl.info,  Node: Top,  Next: Overview,  Up: (dir)
-
-Common Lisp Extensions
-**********************
-
-This document describes a set of Emacs Lisp facilities borrowed from
-Common Lisp.  All the facilities are described here in detail; for more
-discussion and examples, Guy L. Steele's `Common Lisp, the Language',
-second edition, is the definitive book on Common Lisp.  While this
-document does not assume any prior knowledge of Common Lisp, it does
-assume a basic familiarity with Emacs Lisp.
-
-* Menu:
-
-* Overview::             Installation, usage, etc.
-* Program Structure::    Arglists, `eval-when', `defalias'
-* Predicates::           `typep', `eql', and `equalp'
-* Control Structure::    `setf', `when', `do', `loop', etc.
-* Macros::               Destructuring, `define-compiler-macro'
-* Declarations::         `proclaim', `declare', etc.
-* Symbols::              Property lists, `gensym'
-* Numbers::              Predicates, functions, random numbers
-* Sequences::            Mapping, functions, searching, sorting
-* Lists::                `cadr', `sublis', `member*', `assoc*', etc.
-* Hash Tables::          `make-hash-table', `gethash', etc.
-* Structures::           `defstruct'
-* Assertions::           `check-type', `assert', `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
-
-* Function Index::
-* Variable Index::
-
-\1f
-File: cl.info,  Node: Overview,  Next: Program Structure,  Prev: Top,  Up: Top
-
-Overview
-********
-
-Common Lisp is a huge language, and Common Lisp systems tend to be
-massive and extremely complex.  Emacs Lisp, by contrast, is rather
-minimalist in the choice of Lisp features it offers the programmer.  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 "CL" package adds a number of Common Lisp functions and control
-structures to Emacs Lisp.  While not a 100% complete implementation of
-Common Lisp, "CL" adds enough functionality to make Emacs Lisp
-programming significantly more convenient.
-
-   Some Common Lisp features have been omitted from this package for
-various reasons:
-
-   * Some features are too complex or bulky relative to their benefit
-     to Emacs Lisp programmers.  CLOS and Common Lisp streams are fine
-     examples of this group.
-
-   * 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 "CL" package generally makes no attempt to emulate these
-     features.
-
-   * Some features conflict with existing things in Emacs Lisp.  For
-     example, Emacs' `assoc' function is incompatible with the Common
-     Lisp `assoc'.  In such cases, this package usually adds the suffix
-     `*' to the function name of the Common Lisp version of the
-     function (e.g., `assoc*').
-
-   The package described here was written by Dave Gillespie,
-`daveg@synaptics.com'.  It is a total rewrite of the original 1986
-`cl.el' package by Cesar Quiroz.  Most features of the Quiroz package
-have been 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.
-
-* 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
-
-\1f
-File: cl.info,  Node: Usage,  Next: Organization,  Prev: Overview,  Up: Overview
-
-Usage
-=====
-
-Lisp code that uses features from the "CL" package should include at
-the beginning:
-
-     (require 'cl)
-
-If you want to ensure that the new (Gillespie) version of "CL" is the
-one that is present, add an additional `(require 'cl-19)' call:
-
-     (require 'cl)
-     (require 'cl-19)
-
-The second call will fail (with "`cl-19.el' not found") if the old
-`cl.el' package was in use.
-
-   It is safe to arrange to load "CL" at all times, e.g., in your
-`.emacs' file.  But it's a good idea, for portability, to `(require
-'cl)' in your code even if you do this.
-
-\1f
-File: cl.info,  Node: Organization,  Next: Installation,  Prev: Usage,  Up: Overview
-
-Organization
-============
-
-The Common Lisp package is organized into four files:
-
-`cl.el'
-     This is the "main" file, which contains basic functions and
-     information about the package.  This file is relatively
-     compact--about 700 lines.
-
-`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 `cadr' function won't need to pay the
-     overhead of loading the more advanced functions.
-
-`cl-seq.el'
-     This file contains most of the advanced functions for operating on
-     sequences or lists, such as `delete-if' and `assoc*'.
-
-`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 `.emacs' file).  Most of the
-     macros of this package are isolated in `cl-macs.el' so that they
-     won't take up memory unless you are compiling.
-
-   The file `cl.el' includes all necessary `autoload' commands for the
-functions and macros in the other three files.  All you have to do is
-`(require 'cl)', and `cl.el' will take care of pulling in the other
-files when they are needed.
-
-   There is another file, `cl-compat.el', which defines some routines
-from the older `cl.el' package that are no longer present in the new
-package.  This includes internal routines like `setelt' and
-`zip-lists', deprecated features like `defkeyword', and an emulation of
-the old-style multiple-values feature.  *Note Old CL Compatibility::.
-
-\1f
-File: cl.info,  Node: Installation,  Next: Naming Conventions,  Prev: Organization,  Up: Overview
-
-Installation
-============
-
-Installation of the "CL" package is simple:  Just put the byte-compiled
-files `cl.elc', `cl-extra.elc', `cl-seq.elc', `cl-macs.elc', and
-`cl-compat.elc' into a directory on your `load-path'.
-
-   There are no special requirements to compile this package: The files
-do not have to be loaded before they are compiled, nor do they need to
-be compiled in any particular order.
-
-   You may choose to put the files into your main `lisp/' directory,
-replacing the original `cl.el' file there.  Or, you could put them into
-a directory that comes before `lisp/' on your `load-path' so that the
-old `cl.el' is effectively hidden.
-
-   Also, format the `cl.texinfo' file and put the resulting Info files
-in the `info/' directory or another suitable place.
-
-   You may instead wish to leave this package's components all in their
-own directory, and then add this directory to your `load-path' and
-(Emacs 19 only) `Info-directory-list'.  Add the directory to the front
-of the list so the old "CL" package and its documentation are hidden.
-
-\1f
-File: cl.info,  Node: Naming Conventions,  Prev: Installation,  Up: Overview
-
-Naming Conventions
-==================
-
-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 `*' has been appended to the Common Lisp name to obtain the Emacs
-name:
-
-     defun*        defsubst*     defmacro*     function*
-     member*       assoc*        rassoc*       get*
-     remove*       delete*       mapcar*       sort*
-     floor*        ceiling*      truncate*     round*
-     mod*          rem*          random*
-
-   Internal function and variable names in the package are prefixed by
-`cl-'.  Here is a complete list of functions *not* prefixed by `cl-'
-which were not taken from Common Lisp:
-
-     member        delete        remove        remq
-     rassoc        floatp-safe   lexical-let   lexical-let*
-     callf         callf2        letf          letf*
-     defsubst*     defalias      add-hook      eval-when-compile
-
-(Most of these are Emacs 19 features provided to Emacs 18 users, or
-introduced, like `remq', for reasons of symmetry with similar features.)
-
-   The following simple functions and macros are defined in `cl.el';
-they do not cause other components like `cl-extra' to be loaded.
-
-     eql           floatp-safe   abs           endp
-     evenp         oddp          plusp         minusp
-     last          butlast       nbutlast      caar .. cddddr
-     list*         ldiff         rest          first .. tenth
-     member [1]    copy-list     subst         mapcar* [2]
-     adjoin [3]    acons         pairlis       when
-     unless        pop [4]       push [4]      pushnew [3,4]
-     incf [4]      decf [4]      proclaim      declaim
-     add-hook
-
-[1] This is the Emacs 19-compatible function, not `member*'.
-
-[2] Only for one sequence argument or two list arguments.
-
-[3] Only if `:test' is `eq', `equal', or unspecified, and `:key' is not
-used.
-
-[4] Only when PLACE is a plain variable name.
-
-\1f
-File: cl.info,  Node: Program Structure,  Next: Predicates,  Prev: Overview,  Up: Top
-
-Program Structure
-*****************
-
-This section describes features of the "CL" package which have to do
-with programs as a whole: advanced argument lists for functions, and
-the `eval-when' construct.
-
-* Menu:
-
-* Argument Lists::       `&key', `&aux', `defun*', `defmacro*'.
-* Time of Evaluation::   The `eval-when' construct.
-* Function Aliases::     The `defalias' function.
-
-\1f
-File: cl.info,  Node: Argument Lists,  Next: Time of Evaluation,  Prev: Program Structure,  Up: Program Structure
-
-Argument Lists
-==============
-
-Emacs Lisp's notation for argument lists of functions is a subset of
-the Common Lisp notation.  As well as the familiar `&optional' and
-`&rest' markers, Common Lisp allows you to specify default values for
-optional arguments, and it provides the additional markers `&key' and
-`&aux'.
-
-   Since argument parsing is built-in to Emacs, there is no way for
-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.
-
- - Special Form: defun* NAME ARGLIST BODY...
-     This form is identical to the regular `defun' form, except that
-     ARGLIST is allowed to be a full Common Lisp argument list.  Also,
-     the function body is enclosed in an implicit block called NAME;
-     *note Blocks and Exits::..
-
- - Special Form: defsubst* NAME ARGLIST BODY...
-     This is just like `defun*', except that the function that is
-     defined is automatically proclaimed `inline', i.e., calls to it
-     may be expanded into in-line code by the byte compiler.  This is
-     analogous to the `defsubst' form in Emacs 19; `defsubst*' uses a
-     different method (compiler macros) which works in all version of
-     Emacs, and also generates somewhat more efficient inline
-     expansions.  In particular, `defsubst*' arranges for the
-     processing of keyword arguments, default values, etc., to be done
-     at compile-time whenever possible.
-
- - Special Form: defmacro* NAME ARGLIST BODY...
-     This is identical to the regular `defmacro' form, except that
-     ARGLIST is allowed to be a full Common Lisp argument list.  The
-     `&environment' keyword is supported as described in Steele.  The
-     `&whole' keyword is supported only within destructured lists (see
-     below); top-level `&whole' cannot be implemented with the current
-     Emacs Lisp interpreter.  The macro expander body is enclosed in an
-     implicit block called NAME.
-
- - Special Form: function* SYMBOL-OR-LAMBDA
-     This is identical to the regular `function' form, except that if
-     the argument is a `lambda' form then that form may use a full
-     Common Lisp argument list.
-
-   Also, all forms (such as `defsetf' and `flet') defined in this
-package that include ARGLISTs in their syntax allow full Common Lisp
-argument lists.
-
-   Note that it is *not* necessary to use `defun*' in order to have
-access to most "CL" features in your function.  These features are
-always present; `defun*''s only difference from `defun' is its more
-flexible argument lists and its implicit block.
-
-   The full form of a Common Lisp argument list is
-
-     (VAR...
-      &optional (VAR INITFORM SVAR)...
-      &rest VAR
-      &key ((KEYWORD VAR) INITFORM SVAR)...
-      &aux (VAR INITFORM)...)
-
-   Each of the five argument list sections is optional.  The SVAR,
-INITFORM, and KEYWORD parts are optional; if they are omitted, then
-`(VAR)' may be written simply `VAR'.
-
-   The first section consists of zero or more "required" arguments.
-These arguments must always be specified in a call to the function;
-there is no difference between Emacs Lisp and Common Lisp as far as
-required arguments are concerned.
-
-   The second section consists of "optional" arguments.  These
-arguments may be specified in the function call; if they are not,
-INITFORM specifies the default value used for the argument.  (No
-INITFORM means to use `nil' as the default.)  The INITFORM is evaluated
-with the bindings for the preceding arguments already established; `(a
-&optional (b (1+ a)))' matches one or two arguments, with the second
-argument defaulting to one plus the first argument.  If the SVAR is
-specified, it is an auxiliary variable which is bound to `t' if the
-optional argument was specified, or to `nil' if the argument was
-omitted.  If you don't use an SVAR, then there will be no way for your
-function to tell whether it was called with no argument, or with the
-default value passed explicitly as an argument.
-
-   The third section consists of a single "rest" argument.  If more
-arguments were passed to the function than are accounted for by the
-required and optional arguments, those extra arguments are collected
-into a list and bound to the "rest" argument variable.  Common Lisp's
-`&rest' is equivalent to that of Emacs Lisp.  Common Lisp accepts
-`&body' as a synonym for `&rest' in macro contexts; this package
-accepts it all the time.
-
-   The fourth section consists of "keyword" arguments.  These are
-optional arguments which are specified by name rather than positionally
-in the argument list.  For example,
-
-     (defun* foo (a &optional b &key c d (e 17)))
-
-defines a function which may be called with one, two, or more
-arguments.  The first two arguments are bound to `a' and `b' in the
-usual way.  The remaining arguments must be pairs of the form `:c',
-`:d', or `:e' followed by the value to be bound to the corresponding
-argument variable.  (Symbols whose names begin with a colon are called
-"keywords", and they are self-quoting in the same way as `nil' and `t'.)
-
-   For example, the call `(foo 1 2 :d 3 :c 4)' sets the five arguments
-to 1, 2, 4, 3, and 17, respectively.  If the same keyword appears more
-than once in the function call, the first occurrence takes precedence
-over the later ones.  Note that it is not possible to specify keyword
-arguments without specifying the optional argument `b' as well, since
-`(foo 1 :c 2)' would bind `b' to the keyword `:c', then signal an error
-because `2' is not a valid keyword.
-
-   If a KEYWORD symbol is explicitly specified in the argument list as
-shown in the above diagram, then that keyword will be used instead of
-just the variable name prefixed with a colon.  You can specify a
-KEYWORD symbol which does not begin with a colon at all, but such
-symbols will not be self-quoting; you will have to quote them
-explicitly with an apostrophe in the function call.
-
-   Ordinarily it is an error to pass an unrecognized keyword to a
-function, e.g., `(foo 1 2 :c 3 :goober 4)'.  You can ask Lisp to ignore
-unrecognized keywords, either by adding the marker `&allow-other-keys'
-after the keyword section of the argument list, or by specifying an
-`:allow-other-keys' argument in the call whose value is non-`nil'.  If
-the function uses both `&rest' and `&key' at the same time, the "rest"
-argument is bound to the keyword list as it appears in the call.  For
-example:
-
-     (defun* find-thing (thing &rest rest &key need &allow-other-keys)
-       (or (apply 'member* thing thing-list :allow-other-keys t rest)
-           (if need (error "Thing not found"))))
-
-This function takes a `:need' keyword argument, but also accepts other
-keyword arguments which are passed on to the `member*' function.
-`allow-other-keys' is used to keep both `find-thing' and `member*' from
-complaining about each others' keywords in the arguments.
-
-   As a (significant) performance optimization, this package implements
-the scan for keyword arguments by calling `memq' to search for keywords
-in a "rest" argument.  Technically speaking, this is incorrect, since
-`memq' looks at the odd-numbered values as well as the even-numbered
-keywords.  The net effect is that if you happen to pass a keyword symbol
-as the *value* of another keyword argument, where that keyword symbol
-happens to equal the name of a valid keyword argument of the same
-function, then the keyword parser will become confused.  This minor bug
-can only affect you if you use keyword symbols as general-purpose data
-in your program; this practice is strongly discouraged in Emacs Lisp.
-
-   The fifth section of the argument list consists of "auxiliary
-variables".  These are not really arguments at all, but simply
-variables which are bound to `nil' or to the specified INITFORMS during
-execution of the function.  There is no difference between the
-following two functions, except for a matter of stylistic taste:
-
-     (defun* foo (a b &aux (c (+ a b)) d)
-       BODY)
-     
-     (defun* foo (a b)
-       (let ((c (+ a b)) d)
-         BODY))
-
-   Argument lists support "destructuring".  In Common Lisp,
-destructuring is only allowed with `defmacro'; this package allows it
-with `defun*' and other argument lists as well.  In destructuring, any
-argument variable (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 be a list whose elements match this
-recursive argument list.  For example:
-
-     (defmacro* dolist ((var listform &optional resultform)
-                        &rest body)
-       ...)
-
-   This says that the first argument of `dolist' must be a list of two
-or three items; if there are other arguments as well as this list, they
-are stored in `body'.  All features allowed in regular argument lists
-are allowed in these recursive argument lists.  In addition, the clause
-`&whole VAR' is allowed at the front of a recursive argument list.  It
-binds VAR to the whole list being matched; thus `(&whole all a b)'
-matches a list of two things, with `a' bound to the first thing, `b'
-bound to the second thing, and `all' bound to the list itself.  (Common
-Lisp allows `&whole' in top-level `defmacro' argument lists as well,
-but Emacs Lisp does not support this usage.)
-
-   One last feature of destructuring is that the argument list may be
-dotted, so that the argument list `(a b . c)' is functionally
-equivalent to `(a b &rest c)'.
-
-   If the optimization quality `safety' is set to 0 (*note
-Declarations::.), error checking for wrong number of arguments and
-invalid keyword arguments is disabled.  By default, argument lists are
-rigorously checked.
-
-\1f
-File: cl.info,  Node: Time of Evaluation,  Next: Function Aliases,  Prev: Argument Lists,  Up: Program Structure
-
-Time of Evaluation
-==================
-
-Normally, the byte-compiler does not actually execute the forms in a
-file it compiles.  For example, if a file contains `(setq foo t)', the
-act of compiling it will not actually set `foo' to `t'.  This is true
-even if the `setq' was a top-level form (i.e., not enclosed in a
-`defun' or other form).  Sometimes, though, you would like to have
-certain top-level forms evaluated at compile-time.  For example, the
-compiler effectively evaluates `defmacro' forms at compile-time so that
-later parts of the file can refer to the macros that are defined.
-
- - Special Form: eval-when (SITUATIONS...) FORMS...
-     This form controls when the body FORMS are evaluated.  The
-     SITUATIONS list may contain any set of the symbols `compile',
-     `load', and `eval' (or their long-winded ANSI equivalents,
-     `:compile-toplevel', `:load-toplevel', and `:execute').
-
-     The `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 `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 `progn'.
-
-     For compiled top-level `eval-when's, the body FORMS are executed
-     at compile-time if `compile' is in the SITUATIONS list, and the
-     FORMS are written out to the file (to be executed at load-time) if
-     `load' is in the SITUATIONS list.
-
-     For non-compiled-top-level forms, only the `eval' situation is
-     relevant.  (This includes forms executed by the interpreter, forms
-     compiled with `byte-compile' rather than `byte-compile-file', and
-     non-top-level forms.)  The `eval-when' acts like a `progn' if
-     `eval' is specified, and like `nil' (ignoring the body FORMS) if
-     not.
-
-     The rules become more subtle when `eval-when's are nested; consult
-     Steele (second edition) for the gruesome details (and some
-     gruesome examples).
-
-     Some simple examples:
-
-          ;; 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))
-
-     When `foo.el' is compiled, these variables will be set during the
-     compilation itself:
-
-          foo1  foo3  foo5  foo7      ; `compile'
-
-     When `foo.elc' is loaded, these variables will be set:
-
-          foo2  foo3  foo6  foo7      ; `load'
-
-     And if `foo.el' is loaded uncompiled, these variables will be set:
-
-          foo4  foo5  foo6  foo7      ; `eval'
-
-     If these seven `eval-when's had been, say, inside a `defun', then
-     the first three would have been equivalent to `nil' and the last
-     four would have been equivalent to the corresponding `setq's.
-
-     Note that `(eval-when (load eval) ...)' is equivalent to `(progn
-     ...)' in all contexts.  The compiler treats certain top-level
-     forms, like `defmacro' (sort-of) and `require', as if they were
-     wrapped in `(eval-when (compile load eval) ...)'.
-
-   Emacs 19 includes two special forms related to `eval-when'.  One of
-these, `eval-when-compile', is not quite equivalent to any `eval-when'
-construct and is described below.  This package defines a version of
-`eval-when-compile' for the benefit of Emacs 18 users.
-
-   The other form, `(eval-and-compile ...)', is exactly equivalent to
-`(eval-when (compile load eval) ...)' and so is not itself defined by
-this package.
-
- - Special Form: eval-when-compile FORMS...
-     The FORMS are evaluated at compile-time; at execution time, this
-     form acts like a quoted constant of the resulting value.  Used at
-     top-level, `eval-when-compile' is just like `eval-when (compile
-     eval)'.  In other contexts, `eval-when-compile' allows code to be
-     evaluated once at compile-time for efficiency or other reasons.
-
-     This form is similar to the `#.' syntax of true Common Lisp.
-
- - Special Form: load-time-value FORM
-     The FORM is evaluated at load-time; at execution time, this form
-     acts like a quoted constant of the resulting value.
-
-     Early Common Lisp had a `#,' syntax that was similar to this, but
-     ANSI Common Lisp replaced it with `load-time-value' and gave it
-     more well-defined semantics.
-
-     In a compiled file, `load-time-value' arranges for FORM to be
-     evaluated when the `.elc' file is loaded and then used as if it
-     were a quoted constant.  In code compiled by `byte-compile' rather
-     than `byte-compile-file', the effect is identical to
-     `eval-when-compile'.  In uncompiled code, both `eval-when-compile'
-     and `load-time-value' act exactly like `progn'.
-
-          (defun report ()
-            (insert "This function was executed on: "
-                    (current-time-string)
-                    ", compiled on: "
-                    (eval-when-compile (current-time-string))
-                    ;; or '#.(current-time-string) in real Common Lisp
-                    ", and loaded on: "
-                    (load-time-value (current-time-string))))
-
-     Byte-compiled, the above defun will result in the following code
-     (or its compiled equivalent, of course) in the `.elc' file:
-
-          (setq --temp-- (current-time-string))
-          (defun report ()
-            (insert "This function was executed on: "
-                    (current-time-string)
-                    ", compiled on: "
-                    '"Wed Jun 23 18:33:43 1993"
-                    ", and loaded on: "
-                    --temp--))
-
-\1f
-File: cl.info,  Node: Function Aliases,  Prev: Time of Evaluation,  Up: Program Structure
-
-Function Aliases
-================
-
-This section describes a feature from GNU Emacs 19 which this package
-makes available in other versions of Emacs.
-
- - Function: defalias SYMBOL FUNCTION
-     This function sets SYMBOL's function cell to FUNCTION.  It is
-     equivalent to `fset', except that in GNU Emacs 19 it also records
-     the setting in `load-history' so that it can be undone by a later
-     `unload-feature'.
-
-     In other versions of Emacs, `defalias' is a synonym for `fset'.
-
-\1f
-File: cl.info,  Node: Predicates,  Next: Control Structure,  Prev: Program Structure,  Up: Top
-
-Predicates
-**********
-
-This section describes functions for testing whether various facts are
-true or false.
-
-* Menu:
-
-* Type Predicates::      `typep', `deftype', and `coerce'
-* Equality Predicates::  `eql' and `equalp'
-
-\1f
-File: cl.info,  Node: Type Predicates,  Next: Equality Predicates,  Prev: Predicates,  Up: Predicates
-
-Type Predicates
-===============
-
-The "CL" package defines a version of the Common Lisp `typep' predicate.
-
- - Function: typep OBJECT TYPE
-     Check if OBJECT is of type TYPE, where TYPE is a (quoted) type
-     name of the sort used by Common Lisp.  For example, `(typep foo
-     'integer)' is equivalent to `(integerp foo)'.
-
-   The TYPE argument to the above function is either a symbol or a list
-beginning with a symbol.
-
-   * If the type name is a symbol, Emacs appends `-p' to the symbol
-     name to form the name of a predicate function for testing the
-     type.  (Built-in predicates whose names end in `p' rather than
-     `-p' are used when appropriate.)
-
-   * The type symbol `t' stands for the union of all types.  `(typep
-     OBJECT t)' is always true.  Likewise, the type symbol `nil' stands
-     for nothing at all, and `(typep OBJECT nil)' is always false.
-
-   * The type symbol `null' represents the symbol `nil'.  Thus `(typep
-     OBJECT 'null)' is equivalent to `(null OBJECT)'.
-
-   * The type symbol `real' is a synonym for `number', and `fixnum' is
-     a synonym for `integer'.
-
-   * The type symbols `character' and `string-char' match characters.
-     In Emacs-19 and XEmacs-19, characters are the same thing as
-     integers in the range 0-255.  In XEmacs-20, where characters are a
-     first-class data type, this checks for actual characters, and
-     `(typep 8BIT-INTEGER 'character)' will return `nil'.
-
-   * The type symbol `float' uses the `floatp-safe' predicate defined
-     by this package rather than `floatp', so it will work correctly
-     even in Emacs versions without floating-point support.
-
-   * The type list `(integer LOW HIGH)' represents all integers between
-     LOW and HIGH, inclusive.  Either bound may be a list of a single
-     integer to specify an exclusive limit, or a `*' to specify no
-     limit.  The type `(integer * *)' is thus equivalent to `integer'.
-
-   * Likewise, lists beginning with `float', `real', or `number'
-     represent numbers of that type falling in a particular range.
-
-   * Lists beginning with `and', `or', and `not' form combinations of
-     types.  For example, `(or integer (float 0 *))' represents all
-     objects that are integers or non-negative floats.
-
-   * Lists beginning with `member' or `member*' represent objects `eql'
-     to any of the following values.  For example, `(member 1 2 3 4)'
-     is equivalent to `(integer 1 4)', and `(member nil)' is equivalent
-     to `null'.
-
-   * Lists of the form `(satisfies PREDICATE)' represent all objects
-     for which PREDICATE returns true when called with that object as
-     an argument.
-
-   The following function and macro (not technically predicates) are
-related to `typep'.
-
- - Function: coerce OBJECT TYPE
-     This function attempts to convert OBJECT to the specified TYPE.
-     If OBJECT is already of that type as determined by `typep', it is
-     simply returned.  Otherwise, certain types of conversions will be
-     made:  If TYPE is any sequence type (`string', `list', etc.) then
-     OBJECT will be converted to that type if possible.  If TYPE is
-     `character', then strings of length one and symbols with
-     one-character names can be coerced.  If TYPE is `float', then
-     integers can be coerced in versions of Emacs that support floats.
-     In all other circumstances, `coerce' signals an error.
-
- - Special Form: deftype NAME ARGLIST FORMS...
-     This macro defines a new type called NAME.  It is similar to
-     `defmacro' in many ways; when NAME is encountered as a type name,
-     the body FORMS are evaluated and should return a type specifier
-     that is equivalent to the type.  The ARGLIST is a Common Lisp
-     argument list of the sort accepted by `defmacro*'.  The type
-     specifier `(NAME ARGS...)'  is expanded by calling the expander
-     with those arguments; the type symbol `NAME' is expanded by
-     calling the expander with no arguments.  The ARGLIST is processed
-     the same as for `defmacro*' except that optional arguments without
-     explicit defaults use `*' instead of `nil' as the "default"
-     default.  Some examples:
-
-          (deftype null () '(satisfies null))    ; predefined
-          (deftype list () '(or null cons))      ; predefined
-          (deftype unsigned-byte (&optional bits)
-            (list 'integer 0 (if (eq bits '*) bits (1- (lsh 1 bits)))))
-          (unsigned-byte 8)  ==  (integer 0 255)
-          (unsigned-byte)  ==  (integer 0 *)
-          unsigned-byte  ==  (integer 0 *)
-
-     The last example shows how the Common Lisp `unsigned-byte' type
-     specifier could be implemented if desired; this package does not
-     implement `unsigned-byte' by default.
-
-   The `typecase' and `check-type' macros also use type names.  *Note
-Conditionals::.  *Note Assertions::.  The `map', `concatenate', and
-`merge' functions take type-name arguments to specify the type of
-sequence to return.  *Note Sequences::.
-
-\1f
-File: cl.info,  Node: Equality Predicates,  Prev: Type Predicates,  Up: Predicates
-
-Equality Predicates
-===================
-
-This package defines two Common Lisp predicates, `eql' and `equalp'.
-
- - Function: eql A B
-     This function is almost the same as `eq', except that if A and B
-     are numbers of the same type, it compares them for numeric
-     equality (as if by `equal' instead of `eq').  This makes a
-     difference only for versions of Emacs that are compiled with
-     floating-point support, such as Emacs 19.  Emacs floats are
-     allocated objects just like cons cells, which means that `(eq 3.0
-     3.0)' will not necessarily be true--if the two `3.0's were
-     allocated separately, the pointers will be different even though
-     the numbers are the same.  But `(eql 3.0 3.0)' will always be true.
-
-     The types of the arguments must match, so `(eql 3 3.0)' is still
-     false.
-
-     Note that Emacs integers are "direct" rather than allocated, which
-     basically means `(eq 3 3)' will always be true.  Thus `eq' and
-     `eql' behave differently only if floating-point numbers are
-     involved, and are indistinguishable on Emacs versions that don't
-     support floats.
-
-     There is a slight inconsistency with Common Lisp in the treatment
-     of positive and negative zeros.  Some machines, notably those with
-     IEEE standard arithmetic, represent `+0' and `-0' as distinct
-     values.  Normally this doesn't matter because the standard
-     specifies that `(= 0.0 -0.0)' should always be true, and this is
-     indeed what Emacs Lisp and Common Lisp do.  But the Common Lisp
-     standard states that `(eql 0.0 -0.0)' and `(equal 0.0 -0.0)' should
-     be false on IEEE-like machines; Emacs Lisp does not do this, and in
-     fact the only known way to distinguish between the two zeros in
-     Emacs Lisp is to `format' them and check for a minus sign.
-
- - Function: equalp A B
-     This function is a more flexible version of `equal'.  In
-     particular, it compares strings and characters case-insensitively,
-     and it compares numbers without regard to type (so that `(equalp 3
-     3.0)' is true).  Vectors and conses are compared recursively.  All
-     other objects are compared as if by `equal'.
-
-     This function differs from Common Lisp `equalp' in several
-     respects.  In keeping with the idea that strings are less
-     vector-like in Emacs Lisp, this package's `equalp' also will not
-     compare strings against vectors of integers.
-
-   Also note that the Common Lisp functions `member' and `assoc' use
-`eql' to compare elements, whereas Emacs Lisp follows the MacLisp
-tradition and uses `equal' for these two functions.  In Emacs, use
-`member*' and `assoc*' to get functions which use `eql' for comparisons.
-
-\1f
-File: cl.info,  Node: Control Structure,  Next: Macros,  Prev: Predicates,  Up: Top
-
-Control Structure
-*****************
-
-The features described in the following sections implement various
-advanced control structures, including the powerful `setf' facility and
-a number of looping and conditional constructs.
-
-* Menu:
-
-* Assignment::             The `psetq' form
-* Generalized Variables::  `setf', `incf', `push', etc.
-* Variable Bindings::      `progv', `lexical-let', `flet', `macrolet'
-* Conditionals::           `when', `unless', `case', `typecase'
-* Blocks and Exits::       `block', `return', `return-from'
-* Iteration::              `do', `dotimes', `dolist', `do-symbols'
-* Loop Facility::          The Common Lisp `loop' macro
-* Multiple Values::        `values', `multiple-value-bind', etc.
-
-\1f
-File: cl.info,  Node: Assignment,  Next: Generalized Variables,  Prev: Control Structure,  Up: Control Structure
-
-Assignment
-==========
-
-The `psetq' form is just like `setq', except that multiple assignments
-are done in parallel rather than sequentially.
-
- - Special Form: psetq [SYMBOL FORM]...
-     This special form (actually a macro) is used to assign to several
-     variables simultaneously.  Given only one SYMBOL and FORM, it has
-     the same effect as `setq'.  Given several SYMBOL and FORM pairs,
-     it evaluates all the FORMs in advance and then stores the
-     corresponding variables afterwards.
-
-          (setq x 2 y 3)
-          (setq x (+ x y)  y (* x y))
-          x
-               => 5
-          y                     ; `y' was computed after `x' was set.
-               => 15
-          (setq x 2 y 3)
-          (psetq x (+ x y)  y (* x y))
-          x
-               => 5
-          y                     ; `y' was computed before `x' was set.
-               => 6
-
-     The simplest use of `psetq' is `(psetq x y y x)', which exchanges
-     the values of two variables.  (The `rotatef' form provides an even
-     more convenient way to swap two variables; *note Modify Macros::..)
-
-     `psetq' always returns `nil'.
-
-\1f
-File: cl.info,  Node: Generalized Variables,  Next: Variable Bindings,  Prev: Assignment,  Up: Control Structure
-
-Generalized Variables
-=====================
-
-A "generalized variable" or "place form" is one of the many places in
-Lisp memory where values can be stored.  The simplest place form is a
-regular Lisp variable.  But the cars and cdrs of lists, elements of
-arrays, properties of symbols, and many other locations are also places
-where Lisp values are stored.
-
-   The `setf' form is like `setq', except that it accepts arbitrary
-place forms on the left side rather than just symbols.  For example,
-`(setf (car a) b)' sets the car of `a' to `b', doing the same operation
-as `(setcar a b)' but without having to remember two separate functions
-for setting and accessing every type of place.
-
-   Generalized variables are analogous to "lvalues" in the C language,
-where `x = a[i]' gets an element from an array and `a[i] = x' stores an
-element using the same notation.  Just as certain forms like `a[i]' can
-be lvalues in C, there is a set of forms that can be generalized
-variables in Lisp.
-
-* Menu:
-
-* Basic Setf::         `setf' and place forms
-* Modify Macros::      `incf', `push', `rotatef', `letf', `callf', etc.
-* Customizing Setf::   `define-modify-macro', `defsetf', `define-setf-method'
-
-\1f
-File: cl.info,  Node: Basic Setf,  Next: Modify Macros,  Prev: Generalized Variables,  Up: Generalized Variables
-
-Basic Setf
-----------
-
-The `setf' macro is the most basic way to operate on generalized
-variables.
-
- - Special Form: setf [PLACE FORM]...
-     This macro evaluates FORM and stores it in PLACE, which must be a
-     valid generalized variable form.  If there are several PLACE and
-     FORM pairs, the assignments are done sequentially just as with
-     `setq'.  `setf' returns the value of the last FORM.
-
-     The following Lisp forms will work as generalized variables, and
-     so may legally appear in the PLACE argument of `setf':
-
-        * A symbol naming a variable.  In other words, `(setf x y)' is
-          exactly equivalent to `(setq x y)', and `setq' itself is
-          strictly speaking redundant now that `setf' exists.  Many
-          programmers continue to prefer `setq' for setting simple
-          variables, though, purely for stylistic or historical reasons.
-          The macro `(setf x y)' actually expands to `(setq x y)', so
-          there is no performance penalty for using it in compiled code.
-
-        * A call to any of the following Lisp functions:
-
-               car                 cdr                 caar .. cddddr
-               nth                 rest                first .. tenth
-               aref                elt                 nthcdr
-               symbol-function     symbol-value        symbol-plist
-               get                 get*                getf
-               gethash             subseq
-
-          Note that for `nthcdr' and `getf', the list argument of the
-          function must itself be a valid PLACE form.  For example,
-          `(setf (nthcdr 0 foo) 7)' will set `foo' itself to 7.  Note
-          that `push' and `pop' on an `nthcdr' place can be used to
-          insert or delete at any position in a list.  The use of
-          `nthcdr' as a PLACE form is an extension to standard Common
-          Lisp.
-
-        * The following Emacs-specific functions are also `setf'-able.
-          (Some of these are defined only in Emacs 19 or only in
-          XEmacs.)
-
-               buffer-file-name                  marker-position
-               buffer-modified-p                 match-data
-               buffer-name                       mouse-position
-               buffer-string                     overlay-end
-               buffer-substring                  overlay-get
-               current-buffer                    overlay-start
-               current-case-table                point
-               current-column                    point-marker
-               current-global-map                point-max
-               current-input-mode                point-min
-               current-local-map                 process-buffer
-               current-window-configuration      process-filter
-               default-file-modes                process-sentinel
-               default-value                     read-mouse-position
-               documentation-property            screen-height
-               extent-data                       screen-menubar
-               extent-end-position               screen-width
-               extent-start-position             selected-window
-               face-background                   selected-screen
-               face-background-pixmap            selected-frame
-               face-font                         standard-case-table
-               face-foreground                   syntax-table
-               face-underline-p                  window-buffer
-               file-modes                        window-dedicated-p
-               frame-height                      window-display-table
-               frame-parameters                  window-height
-               frame-visible-p                   window-hscroll
-               frame-width                       window-point
-               get-register                      window-start
-               getenv                            window-width
-               global-key-binding                x-get-cut-buffer
-               keymap-parent                     x-get-cutbuffer
-               local-key-binding                 x-get-secondary-selection
-               mark                              x-get-selection
-               mark-marker
-
-          Most of these have directly corresponding "set" functions,
-          like `use-local-map' for `current-local-map', or `goto-char'
-          for `point'.  A few, like `point-min', expand to longer
-          sequences of code when they are `setf''d (`(narrow-to-region
-          x (point-max))' in this case).
-
-        * A call of the form `(substring SUBPLACE N [M])', where
-          SUBPLACE is itself a legal generalized variable whose current
-          value is a string, and where the value stored is also a
-          string.  The new string is spliced into the specified part of
-          the destination string.  For example:
-
-               (setq a (list "hello" "world"))
-                    => ("hello" "world")
-               (cadr a)
-                    => "world"
-               (substring (cadr a) 2 4)
-                    => "rl"
-               (setf (substring (cadr a) 2 4) "o")
-                    => "o"
-               (cadr a)
-                    => "wood"
-               a
-                    => ("hello" "wood")
-
-          The generalized variable `buffer-substring', listed above,
-          also works in this way by replacing a portion of the current
-          buffer.
-
-        * A call of the form `(apply 'FUNC ...)' or `(apply (function
-          FUNC) ...)', where FUNC is a `setf'-able function whose store
-          function is "suitable" in the sense described in Steele's
-          book; since none of the standard Emacs place functions are
-          suitable in this sense, this feature is only interesting when
-          used with places you define yourself with
-          `define-setf-method' or the long form of `defsetf'.
-
-        * A macro call, in which case the macro is expanded and `setf'
-          is applied to the resulting form.
-
-        * Any form for which a `defsetf' or `define-setf-method' has
-          been made.
-
-     Using any forms other than these in the PLACE argument to `setf'
-     will signal an error.
-
-     The `setf' macro takes care to evaluate all subforms in the proper
-     left-to-right order; for example,
-
-          (setf (aref vec (incf i)) i)
-
-     looks like it will evaluate `(incf i)' exactly once, before the
-     following access to `i'; the `setf' expander will insert temporary
-     variables as necessary to ensure that it does in fact work this
-     way no matter what setf-method is defined for `aref'.  (In this
-     case, `aset' would be used and no such steps would be necessary
-     since `aset' takes its arguments in a convenient order.)
-
-     However, if the PLACE form is a macro which explicitly evaluates
-     its arguments in an unusual order, this unusual order will be
-     preserved.  Adapting an example from Steele, given
-
-          (defmacro wrong-order (x y) (list 'aref y x))
-
-     the form `(setf (wrong-order A B) 17)' will evaluate B first, then
-     A, just as in an actual call to `wrong-order'.
-