-*- mode:Text -*- Copyright 1992 Patrick H. Winston. All rights reserved. Version 1.1, transferred from master disk on 21 Jan 93 This file may reference other files containing copyrighted software. Any restrictions on the use of such software are described in the files containing that software. This file may be freely copied as long as this notice is kept intact. PURPOSE Provides program support for Chapter 7, Rules and Rule Chaining. Illustrates forward chaining via grocery bagging. WARNING To produce more interesting behavior, the bag-changing thresholds in the program are different from those in the book. In particular, a new bag is started after 3 large items, 6 medium items, or 12 small items, not 6, 12, and 18. PERFORMANCE EXPERIMENT 1 Examine the file bagger.exp. Run the experiment by typing the following command to your lisp system: (load "bagger.exp") Alternatively, evaluate each Lisp expression in the file one at a time, noting what each does. PERFORMANCE EXPERIMENT 2 Change the grocery list by editing the grocery list in the bagger.lsp file. Run Bagger again with your altered list. KNOWLEDGE ENGINEERING EXPERIMENT 1 Improve the bagger program by editing the rules in the bagger.lsp file so as to allow up to five small items to be placed in any bag that already contains large or medium items. KNOWLEDGE ENGINEERING EXPERIMENT 2 Rewrite the bagger rules so as to have Bagger bag groceries by using the accumulated volume of the groceries bagged, rather than by counting. SMALL-SCALE LISP PROJECT Add a feature to the forward-chaining apparatus so that you can specify what cannot be true, as well as what must be true, among the rules's antecedents. MEDIUM-SCALE LISP PROJECT As it stands, variables are denoted, awkwardly, by lists like this: (? bag). Write Lisp reader macros so that variables are denoted by question mark prefixes like this: ?bag. LARGE-SCALE LISP PROJECT Incorporate the rete procedure into the forward chaining procedure.