cl-walker implements an sexp → CLOS AST tree transformation (and vice versa).

It walks the sexp, expands macros, follows the lexical environment and resolves local functions/macros, etc. All these things are configurable, so it can be used for things like compiling an sexp based javascript (see cl-quasi-quote), lisp2 → lisp1 transformations, serializable delimited continuations (see cl-delico).

It was originally written by Marco Baringer as part of his Arnesi library, and later factored out in a standalone library and further developed by Attila Lendvai.

Quick assessment (2024-02-25)

It's unclear how portable this library is intended to be, since it does a lot of cerror'ing in CCL:

? (hu.dwim.walker:walk-form '(let ((x 1) (y 2)) (list x y)))
> Error: The lexical environment does not contain tags in Clozure CL
> While executing: HU.DWIM.WALKER:ITERATE-TAGS-IN-LEXENV, in process listener(1).
> Type :GO to continue, :POP to abort, :R for a list of available restarts.
> If continued: ignore and do nothing
> Type :? for other options.

Further notes:

Topics: serialization continuations metaprogramming