(define-syntax my-fluid-let (syntax-rules () ((_ ((var val) ...) body ...) (my-fluid-let "temp" () ((var val) ...) body ...)) ((_ "temp" (t ...)((var val) x ...) body ...) (let1 temp val (my-fluid-let-helper (t ... (temp var))(x ...) body ...))) ((_ "temp" ((temp var) ...)() body ...) (let-syntax ((swap! (syntax-rules () ((swap! a b) (let1 tmp a (set! a b) (set! b tmp)))))) (dynamic-wind (lambda () (swap! temp var) ...) (lambda () body ...) (lambda () (swap! temp var) ...)))))) (a+b) ;; 3 (my-fluid-let ((a 100)(b 200)) (a+b)) ;; 300 (a+b) ;; 3