paip-lisp

by norvig

norvig / paip-lisp

Lisp code for the textbook "Paradigms of Artificial Intelligence Programming"

5.2K Stars 534 Forks Last release: 4 months ago (1.1) MIT License 381 Commits 2 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

Paradigms of Artificial Intelligence Programming

PAIP

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.

The Book

The book is available in these formats:

  • pdf: see releases for a scanned version
  • text: PAIP.txt (from OCR'ing the scanned pdf, containing many errors)
  • 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

As seen on TV. See also: errata, comments, retrospective.

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 |   | (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 |

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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.