Your final project represents multiple weeks of concerted effort in the design and implementation of a substantial piece of software with tests. If you opted to explore a more well-defined path (in which there is no shame—it is a path guaranteed to provide many learning opportunities), you probably:
- ... extended your interpreter to handle recursive functions, or perhaps you implemented side-effects and an object system.
- ... opted to implement a garbage collector.
- ... focused on web application development in a popular scripting language as compared to Scheme.
If you do not choose to travel a well-defined path, then I offer two well-undefined paths that you might consider as well.
Research and Interpretation

Consider the poster copied from Peter van Roy's pages at UCL. (I've provided a local copy of the PDF as well.) You might research one of the languages in this poster, focus on those qualities that dictate where it is in this tree, and implement an interpreter for those language features.
For example, you might implement message-passing concurrent programming a la Erlang or occam; the former has single assignment and first-class functions, while the second has mutability of state within a very limited scope. Also, the former is characterized by having asynchronous channels, while the latter employs single-cell, blocking communications.
Your project will present your research, your interpreter as demonstration of your understanding, and tests that demonstrate that your project is correct. It may be subject to code review.
Reflection and Reimplementation
Another path you might take is to re-implement one or more of the interpreters from class in a language you are familiar with. In this case, code quality is critical. As a transcription exercise, it is uninteresting. Therefore, your implementation, testing, and reflection will be carefully scrutinized for their thoroughness and quality.
Deep Language Exploration
Lastly, you might focus on exploring a language you do not know deeply. This implies that you will explore the literature surrounding the design and implementation of this language (and provide a review of your reading) and implement an interesting (and ideally idiomatic) application in this language.
Reflection
In your portfolio submission, there is less room for reflection, as the final project will not have the same opportunities for revision as other parts of the portfolio. However, your writeup should highlight those aspects of your learning that you feel are reflected in your work.