(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