Major Section: ARRAYS
Example Form: (compress1 'delta1 a) General Form: (compress1 name alist)where
name
is a symbol and alist
is a 1-dimensional array, generally
named name
. See arrays for details. Logically speaking, this function
removes irrelevant pairs from alist
, possibly shortening it. The
function returns a new array, alist'
, with the same header
(including name and dimension) as alist
, that, under aref1
, is
everywhere equal to alist
. That is, (aref1 name alist' i)
is
(aref1 name alist i)
, for all legal indices i
. Alist'
may be
shorter than alist
and the non-irrelevant pairs may occur in a different
order than in alist
.Practically speaking, this function plays an important role in the efficient
implementation of aref1
. In addition to creating the new array,
alist'
, compress1
makes that array the ``semantic value'' of name
and allocates a raw lisp array to name
. For each legal index, i
,
that raw lisp array contains (aref1 name alist' i)
in slot i
. Thus,
subsequent aref1
operations can be executed in virtually constant time
provided they are given name
and the alist'
returned by the most
recently executed compress1
or aset1
on name
. See arrays.
In general, compress1
returns an alist whose cdr
is an association
list whose keys are nonnegative integers in ascending order. However, if the
header
specifies an :order
of >
then the keys will occur in
descending order, and if the :order
is :none
or nil
then the keys
will not be sorted, i.e., compress1
is logically the identity function
(though it still attaches an array under the hood). Note however that a
compress1
call is replaced by a hard error if the header specifies an
:order
of :none
or nil
and the array's length exceeds the
maximum-length
field of its header
.