collect-values challenge pasted by DerGuteMoritz on Wed Jun 19 09:44:16 2013

#;39> (collect-values (values 1 2) (values 3 4))
(1 2 3 4)

My ir-macro based implementation pasted by DerGuteMoritz on Wed Jun 19 09:45:23 2013

(define-syntax collect-values
  (ir-macro-transformer
   (lambda (x i c)
     (let* ((vals (cdr x))
            (vars (map (lambda _ (gensym)) vals)))
       `(let-values ,(zip vars vals)
          (append . ,vars))))))

My syntax-rules based implementation added by sjamaan on Wed Jun 19 09:52:46 2013

(define-syntax collect-values
  (syntax-rules ()
    ((_ ?expr0 ...)
     (append (receive ?expr0) ...))))