(define-syntax returning (syntax-rules () ((_ expr) expr) ((_ ((binding expr) ...) body ...) (let ((binding expr) ...) body ... (values binding ...))) ((_ (binding more-bindings ...) expr body ...) (receive (binding more-bindings ...) expr body ... (values binding more-bindings ...))))) ;; examples (returning (vector 1 2 3)) (returning (foo) (list 1 2)) (returning ((foo (list 1 2)) (bar (vector 1 2))) (print "Some vector and a list walk into a bar")) (returning (foo bar) (values 1 2) (print "I can have multiple values"))