, let* ( , , " ", Racket, Asumu Takikawa):
(define-syntax let*
(syntax-rules ()
;; base case
((_ () body ...)
(let ()
body ...))
;; recursive case
((_ (binding next ...) body ...)
(let (binding)
(let* (next ...)
body ...)))))
, , ( , ) . let* let let*, ( binding, next body) .
, let let* , , ( ) let let*.
- . , :
(define-syntax let*
;; bind g1 to current let, g2 to current let*
(syntax-rules ()
((_ () g3 ...)
(g1 ()
g3 ...))
((_ (g4 g5 ...) g6 ...)
(g1 (g4)
(g2 (g5 ...)
g6 ...)))))
g1 g6 , "gensyms" ( Lisp gensym, ). , - let let* , binding, next body - let*.
( , ): , gensyms ( , , ). , "" , (, g1, g2 .. ), , .
, , , , gensyms. , .