Halfway through implementing the new version of interpret. there is a subtle difference that rather than evaluating the variable value when it is encountered, we evaluate it when it is referenced. This means we must carry the env variable through the entirety of the program