Suppose we want to define a function
The main difficulty is that, having encountered a pair of parentheses, the function cannot
know in advance the number of symbols enclosed in the parentheses. But this information will
be necessary for the function to resume the processing of the top level of the expression
after the contents of the parentheses will be done away with. Therefore, the symbol numbering
function must have two arguments: the expression to be processed and the number to be assigned
to the first symbol in the expression (if any). This function must return two results: the
expression processed and the first "unused" number. Thus we come to the following definition
of the function