> > May I ask why $ is needed before symbol()? >
The same reason why you need $ in front of x. The function expression needs a symbol as its name, and you want to dynamically generate that symbol at macro evaluation time, in order to have access to the x variable.
