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.
- Semantic networks:
- Ontologies and triples
- Graph networks and paths
- Graph queries and patterns
- Pattern matching with variables
- RDF and RDFa-Lite
- Ontologies and triples
- Hierarchical frame systems
- Memory organization packets (MOPs)
- Inheritance and defaults
- Case-based reasoning
- Deductive rules
- Unification and backward chaining
- Deductive retrieval
- Declarative programming
- OWL and CYC
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.
- Exercises: Ex 2-4+7+8+9 Lisp Basics (skip if you know Lisp/Scheme from before), Ex 3-8 List Printing, Ex 5-9 Breadth-First Search, Generalized BFS, Ex 3-9 Longest Path
- Applications: Iterative Deepening Search
Text Processing Bundle
- Exercises: Ex 7-2 map-stream, Ex 7-5+6 stream-subst, Ex 8-5 Henley
- Applications: Tokenizer, N-triples reader
Pattern Matcher Bundle
Recursive Tree Bundle
- Exercises: Ex 4-3 3-Trees, Ex 4-4 Binary Search Trees, Ex 8-4 Packages
- Applications: Word Tries, Boggle Solver, Crossword helper
Sequence Functions Bundle
Multiple Values and Continuations Bundle
Numeric Application Bundle
- Exercises: Ex 9-2 Make Change, Ex 9-5 Equation Solver
- Applications: Make Best Change, Intersect Segments
Deductive Retrieval Bundle
Generated Lists Bundle
- Exercises: Generated list exercises
ask-1 exercise. Use the simpler
sddr.lisp code. Try the examples in
Verify that you get the same answers
(ask-1 query), but one at a time, as you get for