![](https://secure.gravatar.com/avatar/2f7ec3b37425cf4e077e7ef376e451be.jpg?s=120&d=mm&r=g)
Stonewall Ballard wrote:
I spent some time tracing the code, and found that multiple-value-bind is being expanded into multiple-value-bind-call because m-v-b is a macro. Perhaps it's not in other Lisps. It is a macro in ANSI-CL.
The first test in the cond of WALK (macro-function (car form) *env*) was true of m-v-b, so it dutifully expanded it and recursed.
I believe you missed part of my patch: the macro-function test is the *second* test my patched walk does, because it first checks for the special forms it knows how to handle: ((special-form? (car form)) ; handle known special operators first (walk-special-form form)) ((macro-function (car form) *env*) (walk (macroexpand form *env*))) Therefore, m-v-b should be handled by walk-special-form which then calls walk-m-v-b. macro-function would never be called upon '(m-v-b ...). Could you try to trace both of these and see that they are indeed traversed? There shouldn't be a need to add to *special-form-alist* because m-v-b is there! But it'll only be found if this list is tested first, not macro-function. Regards, Jorg Hohle.