NOTE 1: Check all Lisp 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.

NOTE 3: Check all JavaScript exercises with the CS325 JS tester. If at all possible, enable ESLint with Airbnb in your JavaScript editor, e.g., Atom, Brackets, Sublime 3, TextMate, Visual Studio Code.


This course is about several 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.

The exercises and applications below are organized into topic bundles. The exercises in a bundle prepare you for the applications in that bundle. Do the exercises and get a "done" on them before submitting code for application. If you are an experienced Lisp programmer, and the Lisp Critic rarely yells at you, do just one or two of the hardest exercises in a bundle. It's best to wait until a topic has been discussed in class before doing the bundle, but that is not required.

A number of older exercises are not in any bundle right now. You can do them for practice if you want, but don't submit them to Code Critic. Email me if you want help on a non-bundled exercise.

Don't panic if some section takes you longer than you expected. But do panic if your productivity falls below what I expect. Make sure you understand how this course works.

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.


When doing exercises from Graham, be sure to read both the book's requirements, and my notes.

Recursion 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: 11am - 11:50am
Location: Tech LR5


Important Links