Я стал лучше в макросах Scheme с тех пор, как задал этот вопрос, и сейчас я использую этот макрос:
(define-syntax derecord
(syntax-rules ()
((_ record ([name record-accessor] ...) body-forms ...)
(let ([name (record-accessor record)] ...)
body-forms ...))))
, который дает синтаксис, подобный следующему:
(derecord my-rec ([x my-rec-x] [y my-rec-y])
(* x y))
Этотолько чуть лучше, чем делать это вручную в let, но я подумал, что выложу это для любых других начинающих, таких как я.