An excerpt from the repository, fetched Nov 12, 2026.
Read the project’s introduction
This is an open-source repository for the book Paradigms of Artificial
Intelligence Programming: Case Studies in Common Lisp by Peter Norvig (1992), and the code contained therein. The copyright has reverted to the author, who has shared it here under MIT license. On the list of most influential books for programmers. As seen on TV. See also: errata, comments, retrospective.
The book is available in these formats:
we're generating ebooks - epub and pdf - from the markdown files, see Releases
scanned pdfs
4th edition, 1998: higher resolution, better OCR, smaller file thanks to better compression
6th edition, 2001: newer printing
text: PAIP.txt (from OCR'ing the scanned pdf, containing many errors)
a source epub: see releases for a cleaned up version downloaded from Safari (much cleaner than the scanned versions)
and chapter?.md markdown files:
Table of Contents
Paradigms of Artificial Intelligence Programming
Front matter
Preface
Part I: Introduction to Common Lisp
1 Introduction to Lisp
2 A Simple Lisp Program
3 Overview of Lisp
Part II: Early AI Programs
4 GPS: The General problem Solver
5 Eliza: Dialog with a Machine
6 Building Software Tools
7 Student: Solving Algebra Word Problems
8 Symbolic Mathematics: A Simplification Program
Part III: Tools and Techniques
9 Efficiency Issues
10 Low-Level Efficiency Issues
11 Logic Programming
12 Compiling Logic programs
13 Object-Oriented Programming
14 Knowledge Representation and Reasoning
Part IV: Advanced AI Programs
15 Symbolic Mathematics with Canonical Forms
16 Expert Systems
17 Line-Diagram Labeling by Constraint Satisfaction
18 Search and the Game of Othello
19 Introduction to Natural Language
20 Unification Grammars
21 A Grammar of English
Part V: The Rest of Lisp
22 Scheme: An Uncommon Lisp
23 Compiling Lisp
24 ANSI Common Lisp
25 Troubleshooting
The Lisp Files
The Lisp code files are listed here:
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
auxfns.lisp
Auxiliary functions
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
Running the Code
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. (If requires does not work properly on
your system you may have to alter its definition, in
auxfns.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").
Other resources
I wrote a retrospective on the book in 2002.
There is a nice Python version of the code, by Daniel Connelly at Georgia Tech, supervised by Ashok Goel.
Read the full README on GitHub