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:
- Was Lisp Project of the Day in 2020.
- That article names arrow-macros as a user of this library.
- However, in 2020, arrow-macros stopped using this library.
- Users are: defmacro-enhance, cl-indeterminism, Toadstool.
Topics: serialization continuations metaprogramming