Introduction
Eval calls apply,
which just calls eval again!
When does it all end?
In this project, you will develop an interpreter for a subset of the Scheme language. As you proceed, think about the issues that arise in the design of a programming language; many quirks of languages are byproducts of implementation decisions in interpreters and compilers. The subset of the language used in this project is described in the functional programming section of Composing Programs, as well as this language specification and built-in procedure reference for the CS 61A subset of Scheme that you'll be building in this project. Since we only include a subset of the language, your interpreter will not exactly match the behavior of other interpreters.
Submission: This project has six parts. Parts 1, 2, 3 and 4 are compulsory while Phase 5 is for extra credit. Part 6 is fully optional. You have 3 weeks for this project. And we recommand you spare around 3 hours for each part. As finals are coming, you'd better work on this project as soon as possible :-)