Scheme is a funny PL to implement. You get a basic parser/evaluator working then suddenly TCO! call/cc! and you're doing a major refactor.