Programming And Meta-Programming In Scheme by Jon Pearce