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