Function Calls
To evaluate (e0 e1 e2 ... en):
Evaluate e0 – you should get a pointer to a closure.
Evaluate e1, e2, ..., en to values, in left-to-right order.
Save the current environment – we’ll come back to it after the function call.
Extend the environment of the closure, mapping the formal arguments to the actual arguments.
Evaluate the body of the function within the extended environment – this gives us our result value.
Restore the old environment (saved in step 3).