(let ((x 1))
 (let ((f (lambda (y) (+ x y))))
   (let ((x 2))
     (f x))))

ENV = Empty

-------------------------------------------------

 (let ((f (lambda (y) (+ x y))))
   (let ((x 2))
     (f x)))

ENV = { x = 1 }

-------------------------------------------------

   (let ((x 2))
     (f x))

ENV = { 
        x = 1, 
        f = closure (y) (+ x y) { x = 1 }
      }

-------------------------------------------------

     (f x)

ENV = { 
        x = 1, 
        f = closure (y) (+ x y) { x = 1 },
        x = 2
      }

-------------------------------------------------

     apply (closure (y) (+ x y) { x = 1})
     to 2

     (+ x y)

ENV = { x = 1, y = 2 }

-------------------------------------------------

     3

ENV = { x = 1, y = 2 }