# SICP Solutions

### Chapter 4, Metalinguistic Abstraction

#### Why extra frame?

Because let is transformed into a lambda creation and invocation. And lambda invocation creates a frame.

#### Why this difference won’t cause any behaviour change?

Because the new lambda does not do anything extra from the original procedure.

#### Design a new way to avoid extra frame creation.

Instead of creating let, we can just put the definitions like (define x '*unassigned*) in the beginning of the body and replace all the existing definitions by set!. For eg:

If we have a procedure:

It gets transformed to: