Lisp code for the textbook "Paradigms of Artificial Intelligence Programming"
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:
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 |
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:
"), for the various instances of file that you want to use. (If
requiresdoes not work properly on your system you may have to alter its definition, in
do-examples, which takes as an argument either
:allor 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