Major Section: ARRAYS
Example Form: (compress1 'delta1 a)whereGeneral Form: (compress1 name alist)
name
is a symbol and alist
is a 1-dimensional array 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'
, of the same 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
then the keys will not
be sorted, i.e., compress1
is logically the identity function (though it
still attaches an array under the hood).