(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))