Programming and Meta-Programming in Scheme (Undergraduate Texts in Computer Science)