I think this works in Guile 1.8.7 (I don't have a later version): (define-macro (progv vars vals . body) `(let (,@(map (lambda (var val) (list var val)) (cadr vars) (cadr vals))) ,@body))
(progv '(one two) '(1 2) (+ one two)) 3 Maybe prettier syntax: (define-macro (progv vars vals . body) `(let (,@(map (lambda (var val) (list var val)) vars vals)) ,@body)) (progv (one two) (1 2) (+ one two)) 3