ちなみに補足すると、letもlambdaの構文糖衣として表現できるので、
>>420の式はそれぞれ

;; expand (let ((tmp #f)) (set! tmp (lambda (self) (self self))) (tmp tmp))
((lambda (tmp)
 (set! tmp (lambda (self) (self self)))
 (tmp tmp)) #f)

;; expand (let ((self #f)) (set! self (lambda () (self))) (self))
((lambda (self)
 (set! self (lambda () (self)))
 (self)) #f)

;; expand (letrec ((self (lambda () (self)))) (self))
((lambda (self)
 (set! self (lambda () (self)))
 (self)) #f)

と展開して、lambda(とset!)だけで表現できる。
(ただしこの展開方法が唯一というわけではない)
こんなこと最初は知る必要ないんだけど、ほとんどの構文が
より基本的な構文への構文糖衣(syntax-sugar)だと知ると
きっと面白くなるよって話。
そろそろスレ違いぎみか。