An introduction to computer programming using the Scheme programming language, a dialect of LISP. Topics include procedural abstraction, recursion, algorithm analysis, data abstraction, program modularity, object-oriented programming, mutable data and streams. This course is the first in the recommended introductory programming sequence for undergraduate majors.
The department has an instructional lab, called the Maclab, which is located in Ryerson 177 and has a large number of Macs with the MacGambit software used for this course. MacGambit is an implementation of the Scheme language, which is (mostly) compatible with the Scheme found in the textbooks. Code from Abelson and Sussman is available on the Maclab server, and this code may be used for your assignments.
You will need to bring two 3.5 inch disks each time you work in the Maclab, so that you can save the work you've done. You should save your work frequently to disk, by which I mean whenever you make changes. At the end of each working session, you should copy your work onto the second disk, so you will have a backup in case something happens to one of the disks.
You may download MacGambit onto disks and run it on another Macintosh. If you do, you should copy the entier MacGambit folder except for the folder called "Additional Sources". You will be copying about 1.9 Megabytes, which can fit onto two disks. To fit it onto one disk, you can use the "stuffit" program to compress the file. If you have questions about copying MacGambit, ask for help from the Maclab staff.
This course will be graded on the basis of weekly assignments, weekly quizzes, a midterm and final exam. The assignments are due at the time of class. No credit will be given for late assignments. This policy is intended to encourage you to keep up with the work, which is EXTREMELY important in this course.
Quizzes will be given during the last 10 minutes of class every Wednesday, covering the material up through Monday's lecture, as well as the previous homework. They should be easy if you've come to class and done the work. Make-up quizzes will not be given.
The grade in this course will be based on the following percentages:
homeworks -- 50%
quizzes -- 10%
midterm -- 15%
final exam -- 25%
The letter grade you get in the course will be determined by the following absolute scale, based on the total number of points you receive (out of 100).
95 -100: A+
90 - 94: A
85 - 89: A-
80 - 84: B+
75 - 79: B
70 - 74: B-
65 - 69: C+
60 - 64: C
55 - 59: C-
50 - 54: D+
45 - 49: D
40 - 44: D-
0 - 39: F
There will be 8 assignments during the quarter. You will hand in a printout of your code along with a printout of your testing the program. Please make sure your papers are stapled in order and that your name appears on every page. You will also put all of your code and tests in a folder with your name on it and the assignment number, and then copy this folder into the appropriate folder within the HomeWork DropBox on the Maclab server (Maclab Administration, Courses, Fall 1996, CS 115-03, HomeWork DropBox).
The following list of material corresponds to Chapters 1, 2, and 3 of the Abelson and Sussman textbook.
Expressions and Procedures: expressions, naming and the environment, lambda expressions, compound expressions, substitution model of evaluation, conditional expresssions, black box abstraction, block structure and scope, let expressions
Designing, Testing and Debugging : introduction, input/output
Performance Analysis and Probabilisitic Methods : orders of growth, types of recursion, probabilistic methods
Procedures Revisited: procedures as parameters, procedures as returned values
Data Abstraction : introduction, pairs, message-passing, representing sets, example: Huffman coding
State : assignment, local state, object-oriented programming, environment model of evaluation, mutable data
Streams: introduction, higher-order procedures, maps, filters, nested mappings, implementing streams, infinitely long streams, nested mappings over infinite streams, modeling local state
CS 115-03 page
Peter Kimmel (kimmel@cs.uchicago.edu)