Chris Pollett>Old Classes>PIC 15, Fall 1999

Fall 1999 PIC 15 Home Page/Syllabus

Introduction to Lisp and Symbolic Computation

Instructor:Chris Pollett
Office: 6183 Math Sciences
Phone Number: (310) 825-2814
Office Hours: MW 1:00-2:30pm

Class Meets: MWF 10:00-10:50am in MS5127
Teaching Assistant: David Beckwith
Office: MS2343
Phone Number:
Office Hours: T 11:30am-12:30pm Th 9am-10am

Section 1a Meets: TR 10:00-10:50AM in MS5233
Enrollment info
Course Info:
Homework Assignments:
Practice Exams:


To enroll in this course, you must have taken PIC 10A or the equivalent. Mathematical tools and concepts will be used in this course although no mathematical background beyond typical high school algebra will be assumed. A willingness to learn new mathematical ideas is important.

Texts and Links

Available on Reserve at Powell Library

Required Text: Structure and Interpretation of Computer Programs, 2nd Edition, by Harold Abelson, Gerald Jay Sussman, and Julie Sussman.
Errata , Source Code Examples
Recommended Reference:
The Scheme Programming Language by R. Kent Dybvig.
Online References
& Other Links:
In the PIC Lab: G:\scheme\MITScheme 7.4.7 on the PIC WinNT Network.


In this class we will study the various kinds of techniques and algorithms that are useful in writing a programming language and also organizing code written in a programming language. We will try to understand the process by which both we and computers can attach a meaning or functionality to computer programs. Studying these techniques and algorithms should help to make learning new programming languages rapid and relatively pain free. The name of this class derives from the fact that programming languages are made up of symbols and computations about them usually involve manipulations of symbols rather than solely computations on numbers. Since programming languages can be considered toy versions of natural languages, it is not surprising that many of the techniques developed in this class are also useful in AI. Thus, this class can be considered as providing the background for a more detailed class in either compilers or AI. We will cover the following topics this quarter: functional programming, higher order functions, various types of recursion, data abstraction, data directed programming, objects with state, environment structures, concurrency, streams, a metacircular evaluator for Scheme, and a little bit of logic programming. Programs for this course will be written in Scheme, an elegant and simplified version of LISP.

Below is a tentative time table for when we'll do things this quarter:

Week 1 Oct.1 read syllabus, SICP 1-1.1.5 pp.1-17.
Week 2 Oct.4, 6, 8 SICP 1.1.6-1.3.4 pp.17-76.
Week 3 Oct.11 (hw1 due), 13, 15 SICP 2-2.2.3 pp.80-126.
Week 4 Oct.18, 20 (hw2 due), 22 SICP 2.3-2.5.1 pp.142-175.
Week 5 Oct.25, 27 (review), 29 (In Class Midterm) SICP 2.5.2-2.5.3 pp.192-216.
Week 6 Nov.1, 3 (hw3 due), 5 SICP 3-3.32 pp.217-266.
Week 7 Nov.8, 10, 12 (hw4 due) SICP 3.3.3-3.4.2 pp.266-316.
Week 8 Nov.15, 17, 19 SICP 3.5-4.1.1 pp.316-368.
Week 9 Nov.22 (hw5 due), 24, 26 (Holiday) SICP 4.1.2-4.1.6 pp.368-406.
Week 10 Nov.29, Dec.1, 3 SICP 4.2.3-4.4.2 pp.409-463.
Week 11 Dec.6 (hw6 due), 8 (review) SICP 4.4.3- pp.463-478.
Week 12 Dec.14 (Final) Held in MS5127 from 11:30a.m.-2:30p.m.

Grade Breakdown / Grading Policy

Homeworks       50% 
Midterm         20%    
Final           30%

When I assign grades the high score has an opportunity to receive an A+. I do curve grades and my curving will be in line with previous times this class has been taught.

Homework Info

| General Info | Submitting Programs | Regrades | Required Formatting | Academic Honesty |

General Info

There will be 6 homeworks this quarter. Links to the current list of assignments can be found at the top of this page. After an assignment has been returned a link to its solution will be placed off the assignment page. Each homework will be a combination of a reading assignment, written problems, and a programming assignment. Material from the reading part of an assignment may appear on midterms and finals. The written part of an assignment will always be due at the start of lecture on the day an assignment is due. The programming part will be due in your submit folder by 11:59pm on the day assignments are due. Late homeworks will not be accepted; however, your low homework score will be dropped.

Submitting Programming Assignments

To submit an assignment, simply copy the required files to your \SUBMIT directory. Leave them there for the rest of the quarter, even after they have been collected and graded. You may be able to submit files remotely with ftp, but it is best to make sure your submission works in the Lab before you submit. This check generally requires a trip to the PIC Lab. If you wish, you may overwrite a previous submission with a new version at any time before the due time on the due date.

Please do not store any files in your submit directory other than those that are to be or have been collected.

To confirm that you have submitted correctly, run the checksubmit program, but be advised that this program does not always work correctly.

Your assignment grade will be placed in your \RETURN directory each week; create the directory if it doesn't exist. Please check your \return subdirectory each week to verify that your previous submission is received and graded. This is very important; it is the only way to know for sure that you actually received credit for your assignment.


If you believe an error was made in the grading of your program or exam, you may submit a request for regrading to me, Professor Pollett. These requests must be submitted no more than a week after the work is made available to you to be picked up. No requests for regrades will be considered unless they meet this deadlines. Be forewarned that the whole piece of work will be regraded, so the grade may go down rather than up. Pick up graded work not returned online from your TA.

Required Formatting

Since some of the grading process will be automated, it is important that your program follow the specifications in the assignment exactly. In particular, make sure submitted filenames are correct and data items in your program are inputted and outputted in the proper sequence and format. Please include the following items in the header of every programming assignment you submit:

This is a link to an example of a properly formatted homework header. Except for the description, honesty pledge, and list of known bugs, the same information should be provided in the header of your written homework as well. Please staple the pages in your written homework together and put your name on every page. Written homework need not be typed, but it should be neatly arranged, with the assigned problems in order, so that the grader can read it easily.

Your code should be as easy to read as possible. Use indentation carefully and consistently to delineate levels of nesting. Disjoint blocks should be well separated by concise and informative comments. Although you are allowed a fair amount of choice in style, please try to conform to the conventions used in lecture and in the text.

Academic Honesty

You are both allowed and encouraged to discuss general algorithms and approaches to programming problems with your classmates. But these discussions must remain at a high level and not involve actual code being exchanged. In particular, THE CODE YOU SUBMIT AS SOLUTIONS TO PROGRAMMING ASSIGNMENTS MUST BE YOUR OWN INDEPENDENT WORK. DO NOT SHARE CODE.

You are required to include the following Academic Honesty Pledge at the top of each program you submit:

Honesty Pledge:

I, (insert your name here), pledge that this is my own independent work, which conforms to the guidelines of academic honesty as described in the course syllabus.

The pledge must be worded precisely as above, with your own name inserted. Be aware that any detected activity even bordering on an infringement of these academic honesty guidelines will be forwarded to the Dean of Students for full investigation. The penalties may be severe, in several recent cases, students have been suspended and have had the incident permanently recorded. If you witness any cheating by classmates, please report it to Professor Pollett as soon as possible.


As shown above in the grade breakdown there will be both a midterm and final in this course. Both of these are closed book, closed notes. You will be allowed only the test and your pen or pencil on your desk during these exams. Beeper or cell-phone interruptions will result in immediate excusal from the test. The midterm will be in class on Oct 29. The final will be 11:30a.m-2:30p.m., Dec.14. A photo ID will be required to take these tests. The final will cover material from the whole quarter although there will be an emphasis on material after the midterm. No make up exams will be given. The final exam may be scaled to replace the midterm if the midterm was missed under provably legitimate circumstances. These exams will test whether or not the student has mastered the material both presented in class or assigned as homework during the quarter. I will try to avoid both tricky and ambiguous questions. The week before each exam I will give out a list of problems representative of the level of difficulty of problems the student will be expected to answer on the exam. Any disputes concerning grades on exams should be directed to me, Professor Pollett.