(define-syntax returning (syntax-rules (=>) ((_ expr => binding body ...) (let ((binding expr)) body ... binding)) ((_ expr body ...) (let ((tmp expr)) body ... tmp)))) (returning (vector 1 2 3) => vec (vector-set! vec 0 100) (print "I set the vector")) (returning (list 1 2 3) (print "I return a list"))