tail.ss
(module tail mzscheme

  (define-syntax let-tail-continuation
    (syntax-rules ()
      [(_ k body1 body2 ...)
       (let ([thunk (let/cc return
                      (let-syntax ([k (syntax-id-rules ()
                                        [(k e) (return (lambda () e))]
                                        [k (lambda ()
                                             (return (lambda () e)))])])
                        (lambda () body1 body2 ...)))])
         (thunk))]))

  (define-syntax let/tc (make-rename-transformer #'let-tail-continuation))

  (define-syntax push-begin
    (syntax-rules ()
      [(_ e1 e2 ...)
       (call-with-values (lambda () e1 e2 ...) values)]))

  (provide let-tail-continuation let/tc push-begin))