MAKE-FAST-ALIST.html -- ACL2 Version 6.3

## MAKE-FAST-ALIST

`(make-fast-alist alist)` creates a fast-alist from the input alist, `` returning `alist` itself 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 with-fast-alist.

Logically, `make-fast-alist` is the identity function.

Under the hood, we construct and return an object that is `equal` to `alist` and which is a fast alist. If `alist` is already a fast alist, almost no work is required: we simply return it unchanged.

When `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 `alist` 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.)