#### 2.4.1 Top-Level Definitions ¶

A top-level definition,

    (define variable expression)

has essentially the same effect as this assignment expression, if variable is bound:

    (set! variable expression)

If variable is not bound, however, `define` binds variable to a new location in the current environment before performing the assignment (it is an error to perform a `set!` on an unbound variable). If you omit expression, the variable becomes unassigned; an attempt to reference such a variable is an error.

    (define add3
       (lambda (x) (+ x 3)))                ⇒  unspecified
    (add3 3)                                ⇒  6

    (define first car)                      ⇒  unspecified
    (first '(1 2))                          ⇒  1

    (define bar)                            ⇒  unspecified
    bar                                     error→ Unassigned variable