It has to get the definition out of the symbol first. (Otherwise, how could it tell whether the form is a funtion call, or a macro form?) You're right that the definition of the language should clearly specify that the function to be applied is the symbol-function contents before evaluation of the arguments. That is, it is not correct to re-fetch the contents of the cell after those evaluations.