(make-fast-alist alist)creates a fast-alist from the input alist,
alistitself or, in some cases, a new object equal to it.
Major Section: HONS-AND-MEMOIZATION
Note: it is often better to use
with-fast-alist; see the distributed book
books/centaur/misc/hons-extra.lisp for more information.
make-fast-alist is the identity function.
Under the hood, we construct and return an object that is
alist and which is a fast alist. If
alist is already a fast alist,
almost no work is required: we simply return it unchanged.
alist is not fast, we must minimally construct a hash table for its
bindings. It is often possible to bind this new hash table to
itself. But in certain cases when the alist keys are not normed, a new
alist must be constructed, also, and so we may return an
equal but not
eq alist. (In these cases, we still try to avoid at least some consing by
reusing the "longest normed tail" of the alist.)