CS 135: Designing Functional Programs

Assignment Format

This page explains the major sections of the assignments.

Warmup Exercises

Each assignment will start with a list of warmup exercises from the textbook How to Design Programs. This textbook is available online (follow the link), so it's not necessary to purchase the textbook in order to access the exercises. You don't need to submit warmup exercises, but we strongly advise you to do them to practice concepts discussed in lectures before doing the assignment. On anything that doesn't have to be submitted, you are permitted to work with other people.

Practice Exercises

Below the warmup exercises, we will list extra practice exercises. You don't need to submit these either. You can do them at any time after completing the assignment to solidify your understanding, or as part of studying for an exam.


The preamble discusses some assignment policies. For instance, the solutions you submit must be entirely your own work. The preamble will often contain important restrictions for the assignment that will affect your correctness mark significantly.

Assignment Questions

After the preamble is a list of questions you need to complete. Make sure you read the questions carefully. If you need help doing a question, you can go to office hours or use Piazza.

Bonus Questions

Assignments will sometimes have bonus questions that you can submit for bonus marks. Bonus questions are designed to be challenging; do not fret if you cannot do them. They're for extra credit and we don't expect all students to do them or be able to figure them out easily. You should complete all the required questions before you attempt the bonus questions.

Be aware that the course staff will not provide any hints for bonus questions. Do not ask for help about bonus questions on Piazza either. When marking bonus questions, we may or may not mark design recipe components.


The end of assignments often have enhancements, which are similar to bonus questions, but they are not worth marks and should not be submitted. Enhancements are for additional stimulation. Some of them will be fairly small, while others are more involved and open ended. One of our principles is that these enhancements shouldn't require material from later in the course; they represent a broadening, not an acceleration. As a result, we are somewhat constrained in early challenges, though soon we will have more opportunities than we can use. You are always welcome to read ahead if you find you want to make use of features and techniques we haven't discussed yet, but don't let the fun of doing the challenges distract you from the job of getting the for-credit work done first.

The teaching languages provide a restricted set of functions and special forms. There are times in these challenges when it would be nice to use built-in functions not provided by the teaching languages. We may be able to provide a teachpack with such functions. Or you can set the language level to "Pretty Big", which provides all of standard Racket, plus the special teaching language definitions, plus a large number of extensions designed for very advanced work. What you lose in doing this are the features of the teaching languages that support beginners, namely easier-to-understand error messages and features such as the Stepper.

Last modified on Tuesday, 16 October 2018, at 12:28 hours.