Project structure

You can download all of the project code from our QQ group.

Files you will edit:

  • scheme_eval_apply.py: the recursive evaluator for Scheme expressions
  • scheme_forms.py: evaluation for special forms
  • scheme_classes.py: classes that describe Scheme expressions
  • questions.scm: contains skeleton code for Part III

The rest of the files in the project:

  • scheme.py: the interpreter REPL
  • pair.py: defines the Pair class and the nil object
  • scheme_builtins.py: built-in Scheme procedures
  • scheme_reader.py: the reader for Scheme input (this file is obfuscated so that you * `can implement it in lab)
  • scheme_tokens.py: the tokenizer for Scheme input
  • scheme_utils.py: functions for inspecting Scheme expressions
  • ucb.py: utility functions for use in 61A projects
  • tests.scm: a collection of test cases written in Scheme
  • ok: the autograder
  • tests: a directory of tests used by ok
  • mytests.rst: a file where you can add your own tests

For the functions that we ask you to complete, there may be some initial code that we provide. If you would rather not use that code, feel free to delete it and start from scratch. You may also add new function definitions as you see fit.

However, please do not modify any other functions. Doing so may result in your code failing our autograder tests. Also, please do not change any function signatures (names, argument order, or number of arguments).

Throughout this project, you should be testing the correctness of your code. It is good practice to test often, so that it is easy to isolate any problems. However, you should not be testing too often, to allow yourself time to think through problems.

Note: we have unlock tests in this project to guarantee your understanding.