Macro Monstrosity: Some Questions

I solved my own problem with the let. At first I thought I might need to use let* because of the references between the different bindings and values, but the answer was letrec.