Definitions build environments.
Let us add a recursive binding mechanism to our language. To turn the rhs expression of M into a recursive closure, we desire that E be exactly like the environment that we are in the process of constructing. Hence, a function from R to R could have zero, one or an infinite number of fixed-points. However, for every function from environments to environments, we can construct a fixed-point. So we have used letrec to implement rec-let .