c25 home


This course has never kept to a strict schedule.

You are responsible for all announcements made in class, as well as those posted to the newsgroup.


You learn by doing. There are two kinds of doing in this class:

Both are critical. You will be graded on the level of effort you put in both activities. Ideally, both should be fun, challenging, and motivating, in their separate ways.

The Class Project

Class lectures will be organized around the class project, the Lisp Critiquer. The Critiquer is a program that can take novice Lisp code, find bugs and other deficiencies in it, and give the novice critiques comparable to those I give by email. Currently, I envision the following order of discussion.

Week: Theme




Sept 24: Overview

C25 goals, Lisp, and the Lisp Critiquer Project

Sept 30: Knowledge representation: concepts

frames, frame hierarchies, inheritance

Oct 7: Knowledge representation: application

representing Lisp concepts, plans, goals, bugs, and advice

Oct 14: Pattern matching: concepts

matching, unification, recursive concept recognition

Oct 21: Pattern matching: application

finding bugs in Lisp code

Oct 28: Scaling up

modules and packages

Nov 4: Scaling up

authoring tools, defining forms, consistency checkers

Nov 11: Speeding up

discrimination trees, pattern compilers

Nov 18: Extending

extensible patterns, extensible pattern compilers

Nov 25: To be determined


Dec 2: Project review


Dec 9

Dec 12: Last day for code resubmission

Personal Exploration

Everyone has different things they like to do, and different learning styles. In parallel with the class-driven project, you should also be moving as quickly as possibly through Paul Graham's ANSI Common Lisp. You should finish that book by quarter's end at least, though many of you will be done with it sooner.

Reading means nothing in programming, however. Only doing works. Do the exercises at the end of each chapter and in the various exercise files. If you have trouble, email your problems to the TA's.

Use the rules for submission to decide when your answers qualify for submitting to me. Do not send answers to every exercise to me. Many exercises are simply too trivial to merit submission.

Pay particular attention to the example applications in Graham, such as the HTML generator (Chapter 16) and the Ray Tracer (Chapter 9):

For example, the string substitution application (Chapter 7) is a fine place to start to build a tool for updating links in HTML files (but you'll need to add a HTML parser for tags).

Comments? Send mail to Chris Riesbeck.