Welcome to Structure and Interpretation of Computer Programs. This course continues the development of computer problem solving techniques begun in CS21 and CS35. Not only will we solve problems using the features provided by a given programming language, we will learn how to enhance programming languages to make solving problems easier. Abstraction techniques for controlling the complexity of programs will be emphasized. Abstraction is an important skill applicable to almost all areas of engineering design. By studying programs that make repeated and deep use of abstraction, you will learn how to generate precise specifications from vaguely formulated and perhaps partially understood descriptions. This is a skill that is essential in writing large computer programs and will be useful in all intellectual endeavors. Throughout the course, we will be using a dialect of the Lisp programming language, called Scheme. Scheme's great flexibility and power, combined with its very simple syntax, will allow us to concentrate on exploring interesting computer science concepts, without getting sidetracked by irrelevant and distracting details of syntax or other language idiosyncrasies. Topics to be covered include functional programming, recursion, data abstraction, higher-order procedures, lists and symbol processing, sets, object-oriented programming and local state, stream processing, binding, scope, and a number of other semantic issues in programming language design. The course culminates in the development, modification, and extension of an interpreter, written in Scheme, for a substantial subset of the Scheme language itself.
As of 1 Oct, the final exam for CS37 has been scheduled by the registrar for Wednesday 12/16/2009, 9:00am-12:00pm in SC240. Plan to attend.
Please turn OFF all cell-phones. No vibrating. No texting.
Lab assignments will typically be available on Friday and be due at 11:29 pm the next Thursday.
You are encouraged to work with a partner on each lab assignment.
You will turn in your lab assignments electronically (no hardcopy printout is necessary). In order to receive credit for an assignment, you must do the following:
Late labs will not be accepted except in extreme situations and only if you contact me before the deadline or have made prior arrangements. Even if you do not fully complete an assigment, you may submit what you have done to receive partial credit.
Clab 1 (M, Aug. 31)
Clab 2 (W, Sep. 2)
Clab 3 (F, Sep. 4)
Clab 4 (M, Sep 7)
Clab 5 (W, Sep 9)
Clab 6 (F, Sep 11 )
Clab 7 (M, Sep 14)
Clab 8 (W, Sep 16)
Clab 9 (F, Sep 18)
Clab 10 (M, Sep 21)
Clab 11 (W, Sep 23)
Clab 12 (F, Sep 25)
Clab 13 (M, Sep 28)
Clab 14 (W, Sep 30)
Clab 15 (F, Oct 2)
Clab 16 (M, Oct 5)
Clab 17 (W, Oct 7)
Clab 18 (F, Oct 9)
Clab 19 (M, Oct 19)
Clab 20-Midterm test (W, Oct 21)
Clab 21 (F, Oct 23)
Clab 22 (M, Oct 26)
Clab 23 (W, Oct 28)
Clab 24 (F, Oct 30)
Clab 25 (M, Nov. 2)
Homework 1 (due Tu Sep.1 and W, Sep. 2)
Laboratory 1 (due Th, Sep. 3 by 11:59 pm)
Homework 2 (due F, Sep. 4)
Homework 3 (due M, Sep 7 )
Homework 4 (due W, Sep 9)
Laboratory 2 (due Th, Sep. 10 by 11:59 pm)
Homework 5 (due F, Sep 11)
Homework 6 (due M, Sep 14)
Homework 7 (due W, Sep 16)
Laboratory 3 (due Th, Sep. 17 by 11:59 pm)
Homework 8 (due F, Sep 18)
Homework 9 (due M, Sep 21)
Homework 10 (due W, Sep 23)
Laboratory 4 (due Th, Sep. 24 by 11:59 pm)
Homework 11 (due F, Sep 25)
Homework 12 (due M, Sep 28)
Homework 13 (due W, Sep 30)
Laboratory 5 (due Th, Oct 1 by 11:59 pm)
Homework 14 (due F, Oct 2)
Homework 15 (due M, Oct 5)
Homework 16 (due W, Oct 7)
Laboratory 6 (due Th, Oct 8 by 11:59 pm)
Homework 17 (due F, Oct 9)
Homework 18 (due M, Oct 19)
Homework 19 (due W, Oct 21)
Laboratory 7 (due Th, Oct 22 by 11:59 pm)
Homework 20 (due F, Oct 23)
Homework 21 (due M, Oct 26)
Homework 22 (due W, Oct 28)
Laboratory 8 (due Th, Oct 29 by 11:59 pm)
Homework 23 (due F, Oct 30)
Homework 24 (due M, Nov 2)
Homework 25 (due W, Nov. 4)
Laboratory 9 (due Th, Nov.5 by 11:59 pm)
Homework 26 (due F, Nov. 6)
Homework 27 (due M, Nov.9)
Academic honesty is required in all work you submit to be graded. With the exception of your partner on assignments, you may not submit work done with (or by) someone else, or examine or use work done by others to complete your own work.
You may discuss assignment specifications and requirements with others in the class to be sure you understand the problem. In addition, you are allowed to work with others to help learn the course material. However, with the exception of your lab partner, you may not work with others on your assignments. Giving full citation for any help received (whether by a person, on-line, book, or any other source) will avoid questions of academic honesty.
All code you submit must be your own with the following permissible exceptions: code distributed by me as part of the class, code found in the course text book, and code worked on with your assignment partner. You should always include detailed comments that indicates which parts of the assignment you received help on, and what your sources were.
Please see me if there are any questions about what is permissible.