(define-syntax let-slots (ir-macro-transformer (lambda (e i c) (let* ((slots (caadr e)) (struct-name (cadadr e)) (struct (car (cddadr e))) (body (cddr e))) `(let ,(map (lambda (s) `(,s (,(i (apply symbol-append (map strip-syntax (list struct-name '- s)))) ,struct))) slots) ,@body)))))