make-syntactic-closure の free-names のイメージ

(make-syntactic-closure environment free-names form)free-names は,let で包むイメージでいいんだろうか.

(let ((x 1))
  (let-syntax ((foo (sc-macro-transformer
                     (lambda (expr env)
                       (let ((var (cadr expr)))
                         (make-syntactic-closure var (list var) env))))))
    (let ((x 2))
      (foo x))))

foo展開のイメージ

(let ((x@1 1))
  (let-syntax ((foo (sc-macro-transformer
                     (lambda (expr env)
                       (let ((var (cadr expr)))
                         (make-syntactic-closure var (list var) env))))))
    (let ((x@2 2))
      (let ((x@2 x@1)) x@2))))

あるいは,マクロ定義時の環境が透けて見えるイメージ?


下のコード,コメントはchibi-schemeでの実行結果.

(let ((print (lambda (x) (display x) (newline)))
      (x 1))
  (let-syntax ((foo (sc-macro-transformer
                     (lambda (expr env)
                       (let ((var (cadr expr)))
                         `(begin
                            (print ,var)                                         ; 1
                            (print ,(make-syntactic-closure env '() var))        ; 2
                            (print ,(make-syntactic-closure env '(x) var))       ; 1
                            (print ,(make-syntactic-closure env (list var) var)) ; 1
                            ))))))
    (let ((x 2))
      (foo x))))