Merge r21-4-11-chise-0_20-=ucs.
[chise/xemacs-chise.git-] / info / cl.info-4
diff --git a/info/cl.info-4 b/info/cl.info-4
deleted file mode 100644 (file)
index 34e70ca..0000000
+++ /dev/null
@@ -1,852 +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: Implementation Parameters,  Prev: Random Numbers,  Up: Numbers
-
-Implementation Parameters
-=========================
-
-This package defines several useful constants having to with numbers.
-
- - Variable: most-positive-fixnum
-     This constant equals the largest value a Lisp integer can hold.
-     It is typically `2^23-1' or `2^25-1'.
-
- - Variable: most-negative-fixnum
-     This constant equals the smallest (most negative) value a Lisp
-     integer can hold.
-
-   The following parameters have to do with floating-point numbers.
-This package determines their values by exercising the computer's
-floating-point arithmetic in various ways.  Because this operation
-might be slow, the code for initializing them is kept in a separate
-function that must be called before the parameters can be used.
-
- - Function: cl-float-limits
-     This function makes sure that the Common Lisp floating-point
-     parameters like `most-positive-float' have been initialized.
-     Until it is called, these parameters will be `nil'.  If this
-     version of Emacs does not support floats (e.g., most versions of
-     Emacs 18), the parameters will remain `nil'.  If the parameters
-     have already been initialized, the function returns immediately.
-
-     The algorithm makes assumptions that will be valid for most modern
-     machines, but will fail if the machine's arithmetic is extremely
-     unusual, e.g., decimal.
-
-   Since true Common Lisp supports up to four different floating-point
-precisions, it has families of constants like
-`most-positive-single-float', `most-positive-double-float',
-`most-positive-long-float', and so on.  Emacs has only one
-floating-point precision, so this package omits the precision word from
-the constants' names.
-
- - Variable: most-positive-float
-     This constant equals the largest value a Lisp float can hold.  For
-     those systems whose arithmetic supports infinities, this is the
-     largest *finite* value.  For IEEE machines, the value is
-     approximately `1.79e+308'.
-
- - Variable: most-negative-float
-     This constant equals the most-negative value a Lisp float can hold.
-     (It is assumed to be equal to `(- most-positive-float)'.)
-
- - Variable: least-positive-float
-     This constant equals the smallest Lisp float value greater than
-     zero.  For IEEE machines, it is about `4.94e-324' if denormals are
-     supported or `2.22e-308' if not.
-
- - Variable: least-positive-normalized-float
-     This constant equals the smallest *normalized* Lisp float greater
-     than zero, i.e., the smallest value for which IEEE denormalization
-     will not result in a loss of precision.  For IEEE machines, this
-     value is about `2.22e-308'.  For machines that do not support the
-     concept of denormalization and gradual underflow, this constant
-     will always equal `least-positive-float'.
-
- - Variable: least-negative-float
-     This constant is the negative counterpart of
-     `least-positive-float'.
-
- - Variable: least-negative-normalized-float
-     This constant is the negative counterpart of
-     `least-positive-normalized-float'.
-
- - Variable: float-epsilon
-     This constant is the smallest positive Lisp float that can be added
-     to 1.0 to produce a distinct value.  Adding a smaller number to 1.0
-     will yield 1.0 again due to roundoff.  For IEEE machines, epsilon
-     is about `2.22e-16'.
-
- - Variable: float-negative-epsilon
-     This is the smallest positive value that can be subtracted from
-     1.0 to produce a distinct value.  For IEEE machines, it is about
-     `1.11e-16'.
-
-\1f
-File: cl.info,  Node: Sequences,  Next: Lists,  Prev: Numbers,  Up: Top
-
-Sequences
-*********
-
-Common Lisp defines a number of functions that operate on "sequences",
-which are either lists, strings, or vectors.  Emacs Lisp includes a few
-of these, notably `elt' and `length'; this package defines most of the
-rest.
-
-* Menu:
-
-* Sequence Basics::          Arguments shared by all sequence functions
-* Mapping over Sequences::   `mapcar*', `mapcan', `map', `every', etc.
-* Sequence Functions::       `subseq', `remove*', `substitute', etc.
-* Searching Sequences::      `find', `position', `count', `search', etc.
-* Sorting Sequences::        `sort*', `stable-sort', `merge'
-
-\1f
-File: cl.info,  Node: Sequence Basics,  Next: Mapping over Sequences,  Prev: Sequences,  Up: Sequences
-
-Sequence Basics
-===============
-
-Many of the sequence functions take keyword arguments; *note Argument
-Lists::..  All keyword arguments are optional and, if specified, may
-appear in any order.
-
-   The `:key' argument should be passed either `nil', or a function of
-one argument.  This key function is used as a filter through which the
-elements of the sequence are seen; for example, `(find x y :key 'car)'
-is similar to `(assoc* x y)': It searches for an element of the list
-whose `car' equals `x', rather than for an element which equals `x'
-itself.  If `:key' is omitted or `nil', the filter is effectively the
-identity function.
-
-   The `:test' and `:test-not' arguments should be either `nil', or
-functions of two arguments.  The test function is used to compare two
-sequence elements, or to compare a search value with sequence elements.
-(The two values are passed to the test function in the same order as
-the original sequence function arguments from which they are derived,
-or, if they both come from the same sequence, in the same order as they
-appear in that sequence.)  The `:test' argument specifies a function
-which must return true (non-`nil') to indicate a match; instead, you
-may use `:test-not' to give a function which returns *false* to
-indicate a match.  The default test function is `:test 'eql'.
-
-   Many functions which take ITEM and `:test' or `:test-not' arguments
-also come in `-if' and `-if-not' varieties, where a PREDICATE function
-is passed instead of ITEM, and sequence elements match if the predicate
-returns true on them (or false in the case of `-if-not').  For example:
-
-     (remove* 0 seq :test '=)  ==  (remove-if 'zerop seq)
-
-to remove all zeros from sequence `seq'.
-
-   Some operations can work on a subsequence of the argument sequence;
-these function take `:start' and `:end' arguments which default to zero
-and the length of the sequence, respectively.  Only elements between
-START (inclusive) and END (exclusive) are affected by the operation.
-The END argument may be passed `nil' to signify the length of the
-sequence; otherwise, both START and END must be integers, with `0 <=
-START <= END <= (length SEQ)'.  If the function takes two sequence
-arguments, the limits are defined by keywords `:start1' and `:end1' for
-the first, and `:start2' and `:end2' for the second.
-
-   A few functions accept a `:from-end' argument, which, if non-`nil',
-causes the operation to go from right-to-left through the sequence
-instead of left-to-right, and a `:count' argument, which specifies an
-integer maximum number of elements to be removed or otherwise processed.
-
-   The sequence functions make no guarantees about the order in which
-the `:test', `:test-not', and `:key' functions are called on various
-elements.  Therefore, it is a bad idea to depend on side effects of
-these functions.  For example, `:from-end' may cause the sequence to be
-scanned actually in reverse, or it may be scanned forwards but
-computing a result "as if" it were scanned backwards.  (Some functions,
-like `mapcar*' and `every', *do* specify exactly the order in which the
-function is called so side effects are perfectly acceptable in those
-cases.)
-
-   Strings in GNU Emacs 19 may contain "text properties" as well as
-character data.  Except as noted, it is undefined whether or not text
-properties are preserved by sequence functions.  For example, `(remove*
-?A STR)' may or may not preserve the properties of the characters
-copied from STR into the result.
-
-\1f
-File: cl.info,  Node: Mapping over Sequences,  Next: Sequence Functions,  Prev: Sequence Basics,  Up: Sequences
-
-Mapping over Sequences
-======================
-
-These functions "map" the function you specify over the elements of
-lists or arrays.  They are all variations on the theme of the built-in
-function `mapcar'.
-
- - Function: mapcar* FUNCTION SEQ &rest MORE-SEQS
-     This function calls FUNCTION on successive parallel sets of
-     elements from its argument sequences.  Given a single SEQ argument
-     it is equivalent to `mapcar'; given N sequences, it calls the
-     function with the first elements of each of the sequences as the N
-     arguments to yield the first element of the result list, then with
-     the second elements, and so on.  The mapping stops as soon as the
-     shortest sequence runs out.  The argument sequences may be any
-     mixture of lists, strings, and vectors; the return sequence is
-     always a list.
-
-     Common Lisp's `mapcar' accepts multiple arguments but works only
-     on lists; Emacs Lisp's `mapcar' accepts a single sequence
-     argument.  This package's `mapcar*' works as a compatible superset
-     of both.
-
- - Function: map RESULT-TYPE FUNCTION SEQ &rest MORE-SEQS
-     This function maps FUNCTION over the argument sequences, just like
-     `mapcar*', but it returns a sequence of type RESULT-TYPE rather
-     than a list.  RESULT-TYPE must be one of the following symbols:
-     `vector', `string', `list' (in which case the effect is the same
-     as for `mapcar*'), or `nil' (in which case the results are thrown
-     away and `map' returns `nil').
-
- - Function: maplist FUNCTION LIST &rest MORE-LISTS
-     This function calls FUNCTION on each of its argument lists, then
-     on the `cdr's of those lists, and so on, until the shortest list
-     runs out.  The results are returned in the form of a list.  Thus,
-     `maplist' is like `mapcar*' except that it passes in the list
-     pointers themselves rather than the `car's of the advancing
-     pointers.
-
- - Function: mapc FUNCTION SEQ &rest MORE-SEQS
-     This function is like `mapcar*', except that the values returned
-     by FUNCTION are ignored and thrown away rather than being
-     collected into a list.  The return value of `mapc' is SEQ, the
-     first sequence.
-
- - Function: mapl FUNCTION LIST &rest MORE-LISTS
-     This function is like `maplist', except that it throws away the
-     values returned by FUNCTION.
-
- - Function: mapcan FUNCTION SEQ &rest MORE-SEQS
-     This function is like `mapcar*', except that it concatenates the
-     return values (which must be lists) using `nconc', rather than
-     simply collecting them into a list.
-
- - Function: mapcon FUNCTION LIST &rest MORE-LISTS
-     This function is like `maplist', except that it concatenates the
-     return values using `nconc'.
-
- - Function: some PREDICATE SEQ &rest MORE-SEQS
-     This function calls PREDICATE on each element of SEQ in turn; if
-     PREDICATE returns a non-`nil' value, `some' returns that value,
-     otherwise it returns `nil'.  Given several sequence arguments, it
-     steps through the sequences in parallel until the shortest one
-     runs out, just as in `mapcar*'.  You can rely on the left-to-right
-     order in which the elements are visited, and on the fact that
-     mapping stops immediately as soon as PREDICATE returns non-`nil'.
-
- - Function: every PREDICATE SEQ &rest MORE-SEQS
-     This function calls PREDICATE on each element of the sequence(s)
-     in turn; it returns `nil' as soon as PREDICATE returns `nil' for
-     any element, or `t' if the predicate was true for all elements.
-
- - Function: notany PREDICATE SEQ &rest MORE-SEQS
-     This function calls PREDICATE on each element of the sequence(s)
-     in turn; it returns `nil' as soon as PREDICATE returns a non-`nil'
-     value for any element, or `t' if the predicate was `nil' for all
-     elements.
-
- - Function: notevery PREDICATE SEQ &rest MORE-SEQS
-     This function calls PREDICATE on each element of the sequence(s)
-     in turn; it returns a non-`nil' value as soon as PREDICATE returns
-     `nil' for any element, or `t' if the predicate was true for all
-     elements.
-
- - Function: reduce FUNCTION SEQ &key :from-end :start :end
-          :initial-value :key
-     This function combines the elements of SEQ using an associative
-     binary operation.  Suppose FUNCTION is `*' and SEQ is the list `(2
-     3 4 5)'.  The first two elements of the list are combined with `(*
-     2 3) = 6'; this is combined with the next element, `(* 6 4) = 24',
-     and that is combined with the final element: `(* 24 5) = 120'.
-     Note that the `*' function happens to be self-reducing, so that
-     `(* 2 3 4 5)' has the same effect as an explicit call to `reduce'.
-
-     If `:from-end' is true, the reduction is right-associative instead
-     of left-associative:
-
-          (reduce '- '(1 2 3 4))
-               == (- (- (- 1 2) 3) 4) => -8
-          (reduce '- '(1 2 3 4) :from-end t)
-               == (- 1 (- 2 (- 3 4))) => -2
-
-     If `:key' is specified, it is a function of one argument which is
-     called on each of the sequence elements in turn.
-
-     If `:initial-value' is specified, it is effectively added to the
-     front (or rear in the case of `:from-end') of the sequence.  The
-     `:key' function is *not* applied to the initial value.
-
-     If the sequence, including the initial value, has exactly one
-     element then that element is returned without ever calling
-     FUNCTION.  If the sequence is empty (and there is no initial
-     value), then FUNCTION is called with no arguments to obtain the
-     return value.
-
-   All of these mapping operations can be expressed conveniently in
-terms of the `loop' macro.  In compiled code, `loop' will be faster
-since it generates the loop as in-line code with no function calls.
-
-\1f
-File: cl.info,  Node: Sequence Functions,  Next: Searching Sequences,  Prev: Mapping over Sequences,  Up: Sequences
-
-Sequence Functions
-==================
-
-This section describes a number of Common Lisp functions for operating
-on sequences.
-
- - Function: subseq SEQUENCE START &optional END
-     This function returns a given subsequence of the argument
-     SEQUENCE, which may be a list, string, or vector.  The indices
-     START and END must be in range, and START must be no greater than
-     END.  If END is omitted, it defaults to the length of the
-     sequence.  The return value is always a copy; it does not share
-     structure with SEQUENCE.
-
-     As an extension to Common Lisp, START and/or END may be negative,
-     in which case they represent a distance back from the end of the
-     sequence.  This is for compatibility with Emacs' `substring'
-     function.  Note that `subseq' is the *only* sequence function that
-     allows negative START and END.
-
-     You can use `setf' on a `subseq' form to replace a specified range
-     of elements with elements from another sequence.  The replacement
-     is done as if by `replace', described below.
-
- - Function: concatenate RESULT-TYPE &rest SEQS
-     This function concatenates the argument sequences together to form
-     a result sequence of type RESULT-TYPE, one of the symbols
-     `vector', `string', or `list'.  The arguments are always copied,
-     even in cases such as `(concatenate 'list '(1 2 3))' where the
-     result is identical to an argument.
-
- - Function: fill SEQ ITEM &key :start :end
-     This function fills the elements of the sequence (or the specified
-     part of the sequence) with the value ITEM.
-
- - Function: replace SEQ1 SEQ2 &key :start1 :end1 :start2 :end2
-     This function copies part of SEQ2 into part of SEQ1.  The sequence
-     SEQ1 is not stretched or resized; the amount of data copied is
-     simply the shorter of the source and destination (sub)sequences.
-     The function returns SEQ1.
-
-     If SEQ1 and SEQ2 are `eq', then the replacement will work
-     correctly even if the regions indicated by the start and end
-     arguments overlap.  However, if SEQ1 and SEQ2 are lists which
-     share storage but are not `eq', and the start and end arguments
-     specify overlapping regions, the effect is undefined.
-
- - Function: remove* ITEM SEQ &key :test :test-not :key :count :start
-          :end :from-end
-     This returns a copy of SEQ with all elements matching ITEM
-     removed.  The result may share storage with or be `eq' to SEQ in
-     some circumstances, but the original SEQ will not be modified.
-     The `:test', `:test-not', and `:key' arguments define the matching
-     test that is used; by default, elements `eql' to ITEM are removed.
-     The `:count' argument specifies the maximum number of matching
-     elements that can be removed (only the leftmost COUNT matches are
-     removed).  The `:start' and `:end' arguments specify a region in
-     SEQ in which elements will be removed; elements outside that
-     region are not matched or removed.  The `:from-end' argument, if
-     true, says that elements should be deleted from the end of the
-     sequence rather than the beginning (this matters only if COUNT was
-     also specified).
-
- - Function: delete* ITEM SEQ &key :test :test-not :key :count :start
-          :end :from-end
-     This deletes all elements of SEQ which match ITEM.  It is a
-     destructive operation.  Since Emacs Lisp does not support
-     stretchable strings or vectors, this is the same as `remove*' for
-     those sequence types.  On lists, `remove*' will copy the list if
-     necessary to preserve the original list, whereas `delete*' will
-     splice out parts of the argument list.  Compare `append' and
-     `nconc', which are analogous non-destructive and destructive list
-     operations in Emacs Lisp.
-
-   The predicate-oriented functions `remove-if', `remove-if-not',
-`delete-if', and `delete-if-not' are defined similarly.
-
- - Function: delete ITEM LIST
-     This MacLisp-compatible function deletes from LIST all elements
-     which are `equal' to ITEM.  The `delete' function is built-in to
-     Emacs 19; this package defines it equivalently in Emacs 18.
-
- - Function: remove ITEM LIST
-     This function removes from LIST all elements which are `equal' to
-     ITEM.  This package defines it for symmetry with `delete', even
-     though `remove' is not built-in to Emacs 19.
-
- - Function: remq ITEM LIST
-     This function removes from LIST all elements which are `eq' to
-     ITEM.  This package defines it for symmetry with `delq', even
-     though `remq' is not built-in to Emacs 19.
-
- - Function: remove-duplicates SEQ &key :test :test-not :key :start
-          :end :from-end
-     This function returns a copy of SEQ with duplicate elements
-     removed.  Specifically, if two elements from the sequence match
-     according to the `:test', `:test-not', and `:key' arguments, only
-     the rightmost one is retained.  If `:from-end' is true, the
-     leftmost one is retained instead.  If `:start' or `:end' is
-     specified, only elements within that subsequence are examined or
-     removed.
-
- - Function: delete-duplicates SEQ &key :test :test-not :key :start
-          :end :from-end
-     This function deletes duplicate elements from SEQ.  It is a
-     destructive version of `remove-duplicates'.
-
- - Function: substitute NEW OLD SEQ &key :test :test-not :key :count
-          :start :end :from-end
-     This function returns a copy of SEQ, with all elements matching
-     OLD replaced with NEW.  The `:count', `:start', `:end', and
-     `:from-end' arguments may be used to limit the number of
-     substitutions made.
-
- - Function: nsubstitute NEW OLD SEQ &key :test :test-not :key :count
-          :start :end :from-end
-     This is a destructive version of `substitute'; it performs the
-     substitution using `setcar' or `aset' rather than by returning a
-     changed copy of the sequence.
-
-   The `substitute-if', `substitute-if-not', `nsubstitute-if', and
-`nsubstitute-if-not' functions are defined similarly.  For these, a
-PREDICATE is given in place of the OLD argument.
-
-\1f
-File: cl.info,  Node: Searching Sequences,  Next: Sorting Sequences,  Prev: Sequence Functions,  Up: Sequences
-
-Searching Sequences
-===================
-
-These functions search for elements or subsequences in a sequence.
-(See also `member*' and `assoc*'; *note Lists::..)
-
- - Function: find ITEM SEQ &key :test :test-not :key :start :end
-          :from-end
-     This function searches SEQ for an element matching ITEM.  If it
-     finds a match, it returns the matching element.  Otherwise, it
-     returns `nil'.  It returns the leftmost match, unless `:from-end'
-     is true, in which case it returns the rightmost match.  The
-     `:start' and `:end' arguments may be used to limit the range of
-     elements that are searched.
-
- - Function: position ITEM SEQ &key :test :test-not :key :start :end
-          :from-end
-     This function is like `find', except that it returns the integer
-     position in the sequence of the matching item rather than the item
-     itself.  The position is relative to the start of the sequence as
-     a whole, even if `:start' is non-zero.  The function returns `nil'
-     if no matching element was found.
-
- - Function: count ITEM SEQ &key :test :test-not :key :start :end
-     This function returns the number of elements of SEQ which match
-     ITEM.  The result is always a nonnegative integer.
-
-   The `find-if', `find-if-not', `position-if', `position-if-not',
-`count-if', and `count-if-not' functions are defined similarly.
-
- - Function: mismatch SEQ1 SEQ2 &key :test :test-not :key :start1 :end1
-          :start2 :end2 :from-end
-     This function compares the specified parts of SEQ1 and SEQ2.  If
-     they are the same length and the corresponding elements match
-     (according to `:test', `:test-not', and `:key'), the function
-     returns `nil'.  If there is a mismatch, the function returns the
-     index (relative to SEQ1) of the first mismatching element.  This
-     will be the leftmost pair of elements which do not match, or the
-     position at which the shorter of the two otherwise-matching
-     sequences runs out.
-
-     If `:from-end' is true, then the elements are compared from right
-     to left starting at `(1- END1)' and `(1- END2)'.  If the sequences
-     differ, then one plus the index of the rightmost difference
-     (relative to SEQ1) is returned.
-
-     An interesting example is `(mismatch str1 str2 :key 'upcase)',
-     which compares two strings case-insensitively.
-
- - Function: search SEQ1 SEQ2 &key :test :test-not :key :from-end
-          :start1 :end1 :start2 :end2
-     This function searches SEQ2 for a subsequence that matches SEQ1
-     (or part of it specified by `:start1' and `:end1'.)  Only matches
-     which fall entirely within the region defined by `:start2' and
-     `:end2' will be considered.  The return value is the index of the
-     leftmost element of the leftmost match, relative to the start of
-     SEQ2, or `nil' if no matches were found.  If `:from-end' is true,
-     the function finds the *rightmost* matching subsequence.
-
-\1f
-File: cl.info,  Node: Sorting Sequences,  Prev: Searching Sequences,  Up: Sequences
-
-Sorting Sequences
-=================
-
- - Function: sort* SEQ PREDICATE &key :key
-     This function sorts SEQ into increasing order as determined by
-     using PREDICATE to compare pairs of elements.  PREDICATE should
-     return true (non-`nil') if and only if its first argument is less
-     than (not equal to) its second argument.  For example, `<' and
-     `string-lessp' are suitable predicate functions for sorting
-     numbers and strings, respectively; `>' would sort numbers into
-     decreasing rather than increasing order.
-
-     This function differs from Emacs' built-in `sort' in that it can
-     operate on any type of sequence, not just lists.  Also, it accepts
-     a `:key' argument which is used to preprocess data fed to the
-     PREDICATE function.  For example,
-
-          (setq data (sort data 'string-lessp :key 'downcase))
-
-     sorts DATA, a sequence of strings, into increasing alphabetical
-     order without regard to case.  A `:key' function of `car' would be
-     useful for sorting association lists.
-
-     The `sort*' function is destructive; it sorts lists by actually
-     rearranging the `cdr' pointers in suitable fashion.
-
- - Function: stable-sort SEQ PREDICATE &key :key
-     This function sorts SEQ "stably", meaning two elements which are
-     equal in terms of PREDICATE are guaranteed not to be rearranged
-     out of their original order by the sort.
-
-     In practice, `sort*' and `stable-sort' are equivalent in Emacs
-     Lisp because the underlying `sort' function is stable by default.
-     However, this package reserves the right to use non-stable methods
-     for `sort*' in the future.
-
- - Function: merge TYPE SEQ1 SEQ2 PREDICATE &key :key
-     This function merges two sequences SEQ1 and SEQ2 by interleaving
-     their elements.  The result sequence, of type TYPE (in the sense
-     of `concatenate'), has length equal to the sum of the lengths of
-     the two input sequences.  The sequences may be modified
-     destructively.  Order of elements within SEQ1 and SEQ2 is
-     preserved in the interleaving; elements of the two sequences are
-     compared by PREDICATE (in the sense of `sort') and the lesser
-     element goes first in the result.  When elements are equal, those
-     from SEQ1 precede those from SEQ2 in the result.  Thus, if SEQ1
-     and SEQ2 are both sorted according to PREDICATE, then the result
-     will be a merged sequence which is (stably) sorted according to
-     PREDICATE.
-
-\1f
-File: cl.info,  Node: Lists,  Next: Hash Tables,  Prev: Sequences,  Up: Top
-
-Lists
-*****
-
-The functions described here operate on lists.
-
-* Menu:
-
-* List Functions::                `caddr', `first', `last', `list*', etc.
-* Substitution of Expressions::   `subst', `sublis', etc.
-* Lists as Sets::                 `member*', `adjoin', `union', etc.
-* Association Lists::             `assoc*', `rassoc*', `acons', `pairlis'
-
-\1f
-File: cl.info,  Node: List Functions,  Next: Substitution of Expressions,  Prev: Lists,  Up: Lists
-
-List Functions
-==============
-
-This section describes a number of simple operations on lists, i.e.,
-chains of cons cells.
-
- - Function: caddr X
-     This function is equivalent to `(car (cdr (cdr X)))'.  Likewise,
-     this package defines all 28 `cXXXr' functions where XXX is up to
-     four `a's and/or `d's.  All of these functions are `setf'-able,
-     and calls to them are expanded inline by the byte-compiler for
-     maximum efficiency.
-
- - Function: first X
-     This function is a synonym for `(car X)'.  Likewise, the functions
-     `second', `third', ..., through `tenth' return the given element
-     of the list X.
-
- - Function: rest X
-     This function is a synonym for `(cdr X)'.
-
- - Function: endp X
-     Common Lisp defines this function to act like `null', but
-     signalling an error if `x' is neither a `nil' nor a cons cell.
-     This package simply defines `endp' as a synonym for `null'.
-
- - Function: list-length X
-     This function returns the length of list X, exactly like `(length
-     X)', except that if X is a circular list (where the cdr-chain
-     forms a loop rather than terminating with `nil'), this function
-     returns `nil'.  (The regular `length' function would get stuck if
-     given a circular list.)
-
- - Function: last X &optional N
-     This function returns the last cons, or the Nth-to-last cons, of
-     the list X.  If N is omitted it defaults to 1.  The "last cons"
-     means the first cons cell of the list whose `cdr' is not another
-     cons cell.  (For normal lists, the `cdr' of the last cons will be
-     `nil'.)  This function returns `nil' if X is `nil' or shorter than
-     N.  Note that the last *element* of the list is `(car (last X))'.
-
- - Function: butlast X &optional N
-     This function returns the list X with the last element, or the
-     last N elements, removed.  If N is greater than zero it makes a
-     copy of the list so as not to damage the original list.  In
-     general, `(append (butlast X N) (last X N))' will return a list
-     equal to X.
-
- - Function: nbutlast X &optional N
-     This is a version of `butlast' that works by destructively
-     modifying the `cdr' of the appropriate element, rather than making
-     a copy of the list.
-
- - Function: list* ARG &rest OTHERS
-     This function constructs a list of its arguments.  The final
-     argument becomes the `cdr' of the last cell constructed.  Thus,
-     `(list* A B C)' is equivalent to `(cons A (cons B C))', and
-     `(list* A B nil)' is equivalent to `(list A B)'.
-
-     (Note that this function really is called `list*' in Common Lisp;
-     it is not a name invented for this package like `member*' or
-     `defun*'.)
-
- - Function: ldiff LIST SUBLIST
-     If SUBLIST is a sublist of LIST, i.e., is `eq' to one of the cons
-     cells of LIST, then this function returns a copy of the part of
-     LIST up to but not including SUBLIST.  For example, `(ldiff x
-     (cddr x))' returns the first two elements of the list `x'.  The
-     result is a copy; the original LIST is not modified.  If SUBLIST
-     is not a sublist of LIST, a copy of the entire LIST is returned.
-
- - Function: copy-list LIST
-     This function returns a copy of the list LIST.  It copies dotted
-     lists like `(1 2 . 3)' correctly.
-
- - Function: copy-tree X &optional VECP
-     This function returns a copy of the tree of cons cells X.  Unlike
-     `copy-sequence' (and its alias `copy-list'), which copies only
-     along the `cdr' direction, this function copies (recursively)
-     along both the `car' and the `cdr' directions.  If X is not a cons
-     cell, the function simply returns X unchanged.  If the optional
-     VECP argument is true, this function copies vectors (recursively)
-     as well as cons cells.
-
- - Function: tree-equal X Y &key :test :test-not :key
-     This function compares two trees of cons cells.  If X and Y are
-     both cons cells, their `car's and `cdr's are compared recursively.
-     If neither X nor Y is a cons cell, they are compared by `eql', or
-     according to the specified test.  The `:key' function, if
-     specified, is applied to the elements of both trees.  *Note
-     Sequences::.
-
-\1f
-File: cl.info,  Node: Substitution of Expressions,  Next: Lists as Sets,  Prev: List Functions,  Up: Lists
-
-Substitution of Expressions
-===========================
-
-These functions substitute elements throughout a tree of cons cells.
-(*Note Sequence Functions::, for the `substitute' function, which works
-on just the top-level elements of a list.)
-
- - Function: subst NEW OLD TREE &key :test :test-not :key
-     This function substitutes occurrences of OLD with NEW in TREE, a
-     tree of cons cells.  It returns a substituted tree, which will be
-     a copy except that it may share storage with the argument TREE in
-     parts where no substitutions occurred.  The original TREE is not
-     modified.  This function recurses on, and compares against OLD,
-     both `car's and `cdr's of the component cons cells.  If OLD is
-     itself a cons cell, then matching cells in the tree are
-     substituted as usual without recursively substituting in that
-     cell.  Comparisons with OLD are done according to the specified
-     test (`eql' by default).  The `:key' function is applied to the
-     elements of the tree but not to OLD.
-
- - Function: nsubst NEW OLD TREE &key :test :test-not :key
-     This function is like `subst', except that it works by destructive
-     modification (by `setcar' or `setcdr') rather than copying.
-
-   The `subst-if', `subst-if-not', `nsubst-if', and `nsubst-if-not'
-functions are defined similarly.
-
- - Function: sublis ALIST TREE &key :test :test-not :key
-     This function is like `subst', except that it takes an association
-     list ALIST of OLD-NEW pairs.  Each element of the tree (after
-     applying the `:key' function, if any), is compared with the `car's
-     of ALIST; if it matches, it is replaced by the corresponding `cdr'.
-
- - Function: nsublis ALIST TREE &key :test :test-not :key
-     This is a destructive version of `sublis'.
-
-\1f
-File: cl.info,  Node: Lists as Sets,  Next: Association Lists,  Prev: Substitution of Expressions,  Up: Lists
-
-Lists as Sets
-=============
-
-These functions perform operations on lists which represent sets of
-elements.
-
- - Function: member ITEM LIST
-     This MacLisp-compatible function searches LIST for an element
-     which is `equal' to ITEM.  The `member' function is built-in to
-     Emacs 19; this package defines it equivalently in Emacs 18.  See
-     the following function for a Common-Lisp compatible version.
-
- - Function: member* ITEM LIST &key :test :test-not :key
-     This function searches LIST for an element matching ITEM.  If a
-     match is found, it returns the cons cell whose `car' was the
-     matching element.  Otherwise, it returns `nil'.  Elements are
-     compared by `eql' by default; you can use the `:test',
-     `:test-not', and `:key' arguments to modify this behavior.  *Note
-     Sequences::.
-
-     Note that this function's name is suffixed by `*' to avoid the
-     incompatible `member' function defined in Emacs 19.  (That
-     function uses `equal' for comparisons; it is equivalent to
-     `(member* ITEM LIST :test 'equal)'.)
-
-   The `member-if' and `member-if-not' functions analogously search for
-elements which satisfy a given predicate.
-
- - Function: tailp SUBLIST LIST
-     This function returns `t' if SUBLIST is a sublist of LIST, i.e.,
-     if SUBLIST is `eql' to LIST or to any of its `cdr's.
-
- - Function: adjoin ITEM LIST &key :test :test-not :key
-     This function conses ITEM onto the front of LIST, like `(cons ITEM
-     LIST)', but only if ITEM is not already present on the list (as
-     determined by `member*').  If a `:key' argument is specified, it
-     is applied to ITEM as well as to the elements of LIST during the
-     search, on the reasoning that ITEM is "about" to become part of
-     the list.
-
- - Function: union LIST1 LIST2 &key :test :test-not :key
-     This function combines two lists which represent sets of items,
-     returning a list that represents the union of those two sets.  The
-     result list will contain all items which appear in LIST1 or LIST2,
-     and no others.  If an item appears in both LIST1 and LIST2 it will
-     be copied only once.  If an item is duplicated in LIST1 or LIST2,
-     it is undefined whether or not that duplication will survive in the
-     result list.  The order of elements in the result list is also
-     undefined.
-
- - Function: nunion LIST1 LIST2 &key :test :test-not :key
-     This is a destructive version of `union'; rather than copying, it
-     tries to reuse the storage of the argument lists if possible.
-
- - Function: intersection LIST1 LIST2 &key :test :test-not :key
-     This function computes the intersection of the sets represented by
-     LIST1 and LIST2.  It returns the list of items which appear in
-     both LIST1 and LIST2.
-
- - Function: nintersection LIST1 LIST2 &key :test :test-not :key
-     This is a destructive version of `intersection'.  It tries to
-     reuse storage of LIST1 rather than copying.  It does *not* reuse
-     the storage of LIST2.
-
- - Function: set-difference LIST1 LIST2 &key :test :test-not :key
-     This function computes the "set difference" of LIST1 and LIST2,
-     i.e., the set of elements that appear in LIST1 but *not* in LIST2.
-
- - Function: nset-difference LIST1 LIST2 &key :test :test-not :key
-     This is a destructive `set-difference', which will try to reuse
-     LIST1 if possible.
-
- - Function: set-exclusive-or LIST1 LIST2 &key :test :test-not :key
-     This function computes the "set exclusive or" of LIST1 and LIST2,
-     i.e., the set of elements that appear in exactly one of LIST1 and
-     LIST2.
-
- - Function: nset-exclusive-or LIST1 LIST2 &key :test :test-not :key
-     This is a destructive `set-exclusive-or', which will try to reuse
-     LIST1 and LIST2 if possible.
-
- - Function: subsetp LIST1 LIST2 &key :test :test-not :key
-     This function checks whether LIST1 represents a subset of LIST2,
-     i.e., whether every element of LIST1 also appears in LIST2.
-
-\1f
-File: cl.info,  Node: Association Lists,  Prev: Lists as Sets,  Up: Lists
-
-Association Lists
-=================
-
-An "association list" is a list representing a mapping from one set of
-values to another; any list whose elements are cons cells is an
-association list.
-
- - Function: assoc* ITEM A-LIST &key :test :test-not :key
-     This function searches the association list A-LIST for an element
-     whose `car' matches (in the sense of `:test', `:test-not', and
-     `:key', or by comparison with `eql') a given ITEM.  It returns the
-     matching element, if any, otherwise `nil'.  It ignores elements of
-     A-LIST which are not cons cells.  (This corresponds to the
-     behavior of `assq' and `assoc' in Emacs Lisp; Common Lisp's
-     `assoc' ignores `nil's but considers any other non-cons elements
-     of A-LIST to be an error.)
-
- - Function: rassoc* ITEM A-LIST &key :test :test-not :key
-     This function searches for an element whose `cdr' matches ITEM.
-     If A-LIST represents a mapping, this applies the inverse of the
-     mapping to ITEM.
-
- - Function: rassoc ITEM A-LIST
-     This function searches like `rassoc*' with a `:test' argument of
-     `equal'.  It is analogous to Emacs Lisp's standard `assoc'
-     function, which derives from the MacLisp rather than the Common
-     Lisp tradition.
-
-   The `assoc-if', `assoc-if-not', `rassoc-if', and `rassoc-if-not'
-functions are defined similarly.
-
-   Two simple functions for constructing association lists are:
-
- - Function: acons KEY VALUE ALIST
-     This is equivalent to `(cons (cons KEY VALUE) ALIST)'.
-
- - Function: pairlis KEYS VALUES &optional ALIST
-     This is equivalent to `(nconc (mapcar* 'cons KEYS VALUES) ALIST)'.
-
-\1f
-File: cl.info,  Node: Hash Tables,  Next: Structures,  Prev: Lists,  Up: Top
-
-Hash Tables
-***********
-
-Hash tables are now implemented directly in the C code and documented in
-*Note Hash Tables: (lispref)Hash Tables.
-