This is the repository for the book Paradigms of Artificial Intelligence Programming: Case Studies in Common Lisp by Peter Norvig (1992). Here you'll find:
- A directory of all the Lisp code from the book.
- A
pdf
of the book, split into two parts (because GitHub can't handle big files) covering Chapters 1-14 (PAIP-part1.pdf) and 15-25 (PAIP-part2.pdf). The copyright has recently reverted to me, and I choose to share it under MIT license. - A rough
txt
export, from the pdf, PAIP.txt, containing many errors. - We're in the process of making a nice online version of the book; here's the first draft of a few sample chapters.
As seen on TV. See also: errata, comments, preface, retrospective.
There is no single "application" to run. Rather, there is a collection of source code files, duplicating the code in the book. You can read and/or run whatever you like. Lisp is an interactive language, and you will need to interact with the code to get benefit from it. Some hints:
- You will need a Common Lisp interpreter/compiler/environment. Here's a discussion of the options.
- You will always need
(load "auxfns.lisp")
. - You will need
(requires "
file")
, for the various instances of file that you want to use. (Ifrequires
does not work properly on your system you may have to alter its definition, inauxfns.lisp
. - The function
do-examples
, which takes as an argument either:all
or a chapter number or a list of chapter numbers, can be used to see examples of the use of various functions. For example,(do-examples 1)
shows the examples from chapter 1. Access this by doing(requires "examples")
.
The index below gives the chapter in the book, file name, and short description for each file.
CH | Filename | Description |
- | examples.lisp | A list of example inputs taken from the book |
- | tutor.lisp | An interpreter for running the examples |
- | auxfns.lisp | Auxiliary functions; load this before anything else |
1 | intro.lisp | A few simple definitions |
2 | simple.lisp | Random sentence generator (two versions) |
3 | overview.lisp | 14 versions of LENGTH and other examples |
4 | gps1.lisp | Simple version of General Problem Solver |
4 | gps.lisp | Final version of General Problem Solver |
5 | eliza1.lisp | Basic version of Eliza program |
5 | eliza.lisp | Eliza with more rules; different reader |
6 | patmatch.lisp | Pattern Matching Utility |
6 | eliza-pm.lisp | Version of Eliza using utilities |
6 | search.lisp | Search Utility |
6 | gps-srch.lisp | Version of GPS using the search utility |
7 | student.lisp | The Student Program |
8 | macsyma.lisp | The Macsyma Program |
8 | macsymar.lisp | Simplification and integration rules for Macsyma |
9-10 | (functions from these chapters are in auxfns.lisp) | |
11 | unify.lisp | Unification functions |
11 | prolog1.lisp | First version of Prolog interpreter |
11 | prolog.lisp | Final version of Prolog interpreter |
12 | prologc1.lisp | First version of Prolog compiler |
12 | prologc2.lisp | Second version of Prolog compiler |
12 | prologc.lisp | Final version of Prolog compiler |
12 | prologcp.lisp | Primitives for Prolog compiler |
13 | clos.lisp | Some object-oriented and CLOS code |
14 | krep1.lisp | Knowledge Representation code: first version |
14 | krep2.lisp | Knowledge Representation code with conjunctions |
14 | krep.lisp | Final KR code: worlds and attached functions |
15 | cmacsyma.lisp | Efficient Macsyma with canonical form |
16 | mycin.lisp | The Emycin expert system shell |
16 | mycin-r.lisp | Some rules for a medical application of emycin |
17 | waltz.lisp | A Line-Labeling program using the Waltz algorithm |
18 | othello.lisp | The Othello playing program and some strategies |
18 | othello2.lisp | Additional strategies for Othello |
18 | edge-tab.lisp | Edge table for Iago strategy |
19 | syntax1.lisp | Syntactic Parser |
19 | syntax2.lisp | Syntactic Parser with semantics |
19 | syntax3.lisp | Syntactic Parser with semantics and preferences |
20 | unifgram.lisp | Unification Parser |
21 | grammar.lisp | Comprehensive grammar of English |
21 | lexicon.lisp | Sample Lexicon of English |
22 | interp1.lisp | Scheme interpreter, including version with macros |
22 | interp2.lisp | A tail recursive Scheme interpreter |
22 | interp3.lisp | A Scheme interpreter that handles call/cc |
23 | compile1.lisp | Simple Scheme compiler |
23 | compile2.lisp | Compiler with tail recursion and primitives |
23 | compile3.lisp | Compiler with peephole optimizer |
23 | compopt.lisp | Peephole optimizers for compile3.lisp |
Peter Norvig