NOTE 1: Check all code with the Unit Tester and the Lisp Critic before submitting. Even when there are no unit tests, all code can and should be checked with the Lisp Critic. If I notice mistakes in code that the Critic catches, I stop reviewing immediately and return the code.

NOTE 2: Define all functions in a file, using a Lisp editor. Code typed in the Listener window, or edited in an plain text editor like Sublime, will be incorrectly indented. Such code will be returned unreviewed for proper indentation.


The order of exercises and applications below matches the order of topic discussions in class. Feel free to get ahead of class. Do not panic if you fall behind. But do panic if your productivity falls below what I expect. Make sure you understand how this course works.

This course are different ways to represent and use symbolic knowledge representations to answer questions and solve problems. We will cover three major approaches to representing and using everyday knowledge. Along the way, we will also explore some of the technologies used to share knowledge of the web.

Exercises, Applications, and Bundles

Exercises are small coding problems. Like calisthenics, they help you focus on and strengthen specific "coding muscles." Exercises are more focused on a specific coding challenge, and have very thorough unit tests.

Applications are larger coding problems, requiring you to master and apply multiple coding skills and basic AI concepts to do something useful. There are fewer unit tests, and they are there only to verify that the overall system works for some basic examples.

Exercises are where I do the most critiquing of the quality of your code. There is too much bad code in the real world because developers never learned to write clean solid code in the small.

Applications are where I evaluate how well you have learned to program. I critique them but not in as much detail.

Bundles collect related exercises and applications together. The exercises in a bundle prepare you for the applications in that bundle. Do the exercises and achieve a "Done" status on them before submitting code for application. Exercises that appear in more than one bundle only need to be done once.

Do not skip the exercises. If you are an experienced Lisp programming, and you write really clear code, i.e., the Lisp Critic rarely complains, you may find it useful to only do one or two of the hardest exercises in a bundle. If I'm happy with your first submissions, then you can jump into the application. But if the first thing you send me in a bundle is an application, odds are I'm going to reject it for the mess that it is, and you'll have to go back and do the exercises anyway.


A number of older exercises are not in any bundle right now, because I haven't yet come up with a good relevant final application. Do them for practice if you want, but don't submit them to Code Critic. Email me if there's a non-bundled exercise you tried and had trouble with.

Search Bundle

Text Processing Bundle

Pattern Matcher Bundle

These exercises extend the pattern matcher defined in class quizzes. You need to match.lisp to do these.

Recursive Tree Bundle

Sequence Functions Bundle

Multiple Values and Continuations Bundle

Numeric Application Bundle

Deductive Retrieval Bundle

Generated Lists Bundle

Cleaning Up Legacy Code Bundle

Semantic Web Bundle

Macro Bundle

Faculty: Chris Riesbeck
Time: Monday, Wednesday, Friday: 1pm - 2pm
Location:Annenberg G15


Important Links