\input IMbasic

\hbox{\hskip3em\hskip0pt 1\hskip1em Introduction\hskip2em\bf{}2\rm{}}
\hbox{\hskip3em\hskip20pt 1.1\hskip1em Intellectual Precursors\hskip2em\bf{}4\rm{}}
\hbox{\hskip3em\hskip20pt 1.2\hskip1em Acknowledgments\hskip2em\bf{}4\rm{}}
\hbox{\hskip3em\hskip20pt 1.3\hskip1em References\hskip2em\bf{}5\rm{}}
\hbox{\hskip3em\hskip0pt 2\hskip1em Overview\hskip2em\bf{}7\rm{}}
\hbox{\hskip3em\hskip20pt 2.1\hskip1em Structure of Classes and Instances\hskip2em\bf{}7\rm{}}
\hbox{\hskip3em\hskip20pt 2.2\hskip1em Inheriting Variables and Methods\hskip2em\bf{}8\rm{}}
\hbox{\hskip3em\hskip20pt 2.3\hskip1em Data Oriented Programming -- Using Active Values\hskip2em\bf{}9\rm{}}
\hbox{\hskip3em\hskip20pt 2.4\hskip1em Knowledge Bases\hskip2em\bf{}10\rm{}}
\hbox{\hskip3em\hskip0pt 3\hskip1em Creating and Using Objects\hskip2em\bf{}13\rm{}}
\hbox{\hskip3em\hskip20pt 3.1\hskip1em Sending a Message to an Object\hskip2em\bf{}13\rm{}}
\hbox{\hskip3em\hskip20pt 3.2\hskip1em Creating a New Instance\hskip2em\bf{}14\rm{}}
\hbox{\hskip3em\hskip20pt 3.3\hskip1em Naming and Pointing to Instances\hskip2em\bf{}14\rm{}}
\hbox{\hskip3em\hskip20pt 3.4\hskip1em Defining a New Class\hskip2em\bf{}15\rm{}}
\hbox{\hskip3em\hskip20pt 3.5\hskip1em Defining a Method\hskip2em\bf{}16\rm{}}
\hbox{\hskip3em\hskip0pt 4\hskip1em Object Variables and Properties\hskip2em\bf{}18\rm{}}
\hbox{\hskip3em\hskip20pt 4.1\hskip1em Access Expressions\hskip2em\bf{}18\rm{}}
\hbox{\hskip3em\hskip20pt 4.2\hskip1em Getting Variable and Property Values\hskip2em\bf{}19\rm{}}
\hbox{\hskip3em\hskip20pt 4.3\hskip1em Putting Variable Values and Property Values\hskip2em\bf{}20\rm{}}
\hbox{\hskip3em\hskip20pt 4.4\hskip1em Non-triggering Get and Put\hskip2em\bf{}21\rm{}}
\hbox{\hskip3em\hskip20pt 4.5\hskip1em Local Get Functions\hskip2em\bf{}21\rm{}}
\hbox{\hskip3em\hskip20pt 4.6\hskip1em Accessing Class and Method Properties\hskip2em\bf{}22\rm{}}
\hbox{\hskip3em\hskip20pt 4.7\hskip1em General Get and Put Functions\hskip2em\bf{}23\rm{}}
\hbox{\hskip3em\hskip20pt 4.8\hskip1em Summary of Get and Put Functions\hskip2em\bf{}24\rm{}}
\hbox{\hskip3em\hskip0pt 5\hskip1em Active Values\hskip2em\bf{}25\rm{}}
\hbox{\hskip3em\hskip20pt 5.1\hskip1em Active Values Notation\hskip2em\bf{}25\rm{}}
\hbox{\hskip3em\hskip20pt 5.2\hskip1em Nested Active Values\hskip2em\bf{}25\rm{}}
\hbox{\hskip3em\hskip20pt 5.3\hskip1em Active Values as Default Values\hskip2em\bf{}26\rm{}}
\hbox{\hskip3em\hskip20pt 5.4\hskip1em Standard Access Functions\hskip2em\bf{}26\rm{}}
\hbox{\hskip3em\hskip20pt 5.5\hskip1em User-Defined Access Functions\hskip2em\bf{}27\rm{}}
\hbox{\hskip3em\hskip0pt 6\hskip1em Combining Inherited Methods\hskip2em\bf{}31\rm{}}
\hbox{\hskip3em\hskip20pt 6.1\hskip1em Augmenting an Inherited Method\hskip2em\bf{}31\rm{}}
\hbox{\hskip3em\hskip20pt 6.2\hskip1em Combining Multiple Inherited Methods\hskip2em\bf{}32\rm{}}
\hbox{\hskip3em\hskip0pt 7\hskip1em Instance Creation\hskip2em\bf{}34\rm{}}
\hbox{\hskip3em\hskip20pt 7.1\hskip1em Specifying Values at Instance Creation\hskip2em\bf{}34\rm{}}
\hbox{\hskip3em\hskip20pt 7.2\hskip1em Sending a Message at Instance Creation\hskip2em\bf{}34\rm{}}
\hbox{\hskip3em\hskip20pt 7.3\hskip1em Computing a Value at First Fetch\hskip2em\bf{}35\rm{}}
\hbox{\hskip3em\hskip20pt 7.4\hskip1em Computing a Value at Instance Creation\hskip2em\bf{}35\rm{}}
\hbox{\hskip3em\hskip20pt 7.5\hskip1em Special Actions at Instance Creation\hskip2em\bf{}36\rm{}}
\hbox{\hskip3em\hskip0pt 8\hskip1em Composite Objects\hskip2em\bf{}38\rm{}}
\hbox{\hskip3em\hskip20pt 8.1\hskip1em Basic Concepts for Composite Objects\hskip2em\bf{}38\rm{}}
\hbox{\hskip3em\hskip20pt 8.2\hskip1em Specializing Composite Objects\hskip2em\bf{}39\rm{}}
\hbox{\hskip3em\hskip20pt 8.3\hskip1em Conditional and Iterative Templates\hskip2em\bf{}40\rm{}}
\hbox{\hskip3em\hskip0pt 9\hskip1em Introduction to Rule-Oriented Programming in LOOPS\hskip2em\bf{}41\rm{}}
\hbox{\hskip3em\hskip20pt 9.1\hskip1em Introduction\hskip2em\bf{}41\rm{}}
\hbox{\hskip3em\hskip20pt 9.2\hskip1em Basic Concepts\hskip2em\bf{}42\rm{}}
\hbox{\hskip3em\hskip20pt 9.3\hskip1em Organizing a Rule-Oriented Program\hskip2em\bf{}43\rm{}}
\hbox{\hskip3em\hskip20pt 9.4\hskip1em Control Structures for Selecting Rules\hskip2em\bf{}44\rm{}}
\hbox{\hskip3em\hskip20pt 9.5\hskip1em One-Shot Rules\hskip2em\bf{}46\rm{}}
\hbox{\hskip3em\hskip20pt 9.6\hskip1em Task-Based Control for RuleSets\hskip2em\bf{}47\rm{}}
\hbox{\hskip3em\hskip20pt 9.7\hskip1em Control Structures for Generators\hskip2em\bf{}49\rm{}}
\hbox{\hskip3em\hskip20pt 9.8\hskip1em Saving an Audit Trail of Rule Invocation\hskip2em\bf{}50\rm{}}
\hbox{\hskip3em\hskip40pt 9.8.1\hskip1em Motivations and Applications\hskip2em\bf{}50\rm{}}
\hbox{\hskip3em\hskip40pt 9.8.2\hskip1em Overview of Audit Trail Implementation\hskip2em\bf{}51\rm{}}
\hbox{\hskip3em\hskip40pt 9.8.3\hskip1em An Example of Using Audit Trails\hskip2em\bf{}51\rm{}}
\hbox{\hskip3em\hskip20pt 9.9\hskip1em Comparison with other Rule Languages\hskip2em\bf{}53\rm{}}
\hbox{\hskip3em\hskip40pt 9.9.1\hskip1em The Rationale for Factoring Meta-Level Syntax\hskip2em\bf{}53\rm{}}
\hbox{\hskip3em\hskip40pt 9.9.2\hskip1em The Rationale for RuleSet Hierarchy\hskip2em\bf{}54\rm{}}
\hbox{\hskip3em\hskip40pt 9.9.3\hskip1em The Rationale for RuleSet Control Structures\hskip2em\bf{}54\rm{}}
\hbox{\hskip3em\hskip40pt 9.9.4\hskip1em The Rationale for an Integrated Programming Environment\hskip2em\bf{}56\rm{}}
\hbox{\hskip3em\hskip0pt 10\hskip1em The Rule Language\hskip2em\bf{}58\rm{}}
\hbox{\hskip3em\hskip20pt 10.1\hskip1em Rule Forms\hskip2em\bf{}58\rm{}}
\hbox{\hskip3em\hskip20pt 10.2\hskip1em Kinds of Variables\hskip2em\bf{}59\rm{}}
\hbox{\hskip3em\hskip20pt 10.3\hskip1em Rule Forms\hskip2em\bf{}61\rm{}}
\hbox{\hskip3em\hskip20pt 10.4\hskip1em Infix Operators and Brackets\hskip2em\bf{}61\rm{}}
\hbox{\hskip3em\hskip20pt 10.5\hskip1em Interlisp Functions and Message Sending\hskip2em\bf{}63\rm{}}
\hbox{\hskip3em\hskip20pt 10.6\hskip1em Variables and Properties\hskip2em\bf{}64\rm{}}
\hbox{\hskip3em\hskip20pt 10.7\hskip1em Perspectives\hskip2em\bf{}65\rm{}}
\hbox{\hskip3em\hskip20pt 10.8\hskip1em Computing Selectors and Variable Names\hskip2em\bf{}65\rm{}}
\hbox{\hskip3em\hskip20pt 10.9\hskip1em Recursive Compound Literals\hskip2em\bf{}66\rm{}}
\hbox{\hskip3em\hskip20pt 10.10\hskip1em Assignment Statements\hskip2em\bf{}66\rm{}}
\hbox{\hskip3em\hskip20pt 10.11\hskip1em Meta-Assignment Statements\hskip2em\bf{}67\rm{}}
\hbox{\hskip3em\hskip20pt 10.12\hskip1em Push and Pop Statements\hskip2em\bf{}68\rm{}}
\hbox{\hskip3em\hskip20pt 10.13\hskip1em Invoking RuleSets\hskip2em\bf{}68\rm{}}
\hbox{\hskip3em\hskip20pt 10.14\hskip1em Transfer Calls\hskip2em\bf{}69\rm{}}
\hbox{\hskip3em\hskip20pt 10.15\hskip1em Task Operations\hskip2em\bf{}69\rm{}}
\hbox{\hskip3em\hskip20pt 10.16\hskip1em Stop Statements\hskip2em\bf{}70\rm{}}
\hbox{\hskip3em\hskip0pt 11\hskip1em Using Rules in LOOPS\hskip2em\bf{}72\rm{}}
\hbox{\hskip3em\hskip20pt 11.1\hskip1em Creating RuleSets\hskip2em\bf{}72\rm{}}
\hbox{\hskip3em\hskip20pt 11.2\hskip1em Editing RuleSets\hskip2em\bf{}72\rm{}}
\hbox{\hskip3em\hskip20pt 11.3\hskip1em Copying RuleSets\hskip2em\bf{}73\rm{}}
\hbox{\hskip3em\hskip20pt 11.4\hskip1em Saving RuleSets on LISP Files\hskip2em\bf{}73\rm{}}
\hbox{\hskip3em\hskip20pt 11.5\hskip1em Printing RuleSets\hskip2em\bf{}74\rm{}}
\hbox{\hskip3em\hskip20pt 11.6\hskip1em Running RuleSets from Loops\hskip2em\bf{}74\rm{}}
\hbox{\hskip3em\hskip20pt 11.7\hskip1em Installing RuleSets as Methods\hskip2em\bf{}74\rm{}}
\hbox{\hskip3em\hskip20pt 11.8\hskip1em Installing RuleSets in ActiveValues\hskip2em\bf{}75\rm{}}
\hbox{\hskip3em\hskip20pt 11.9\hskip1em Tracing and Breaking RuleSets\hskip2em\bf{}76\rm{}}
\hbox{\hskip3em\hskip20pt 11.10\hskip1em The Rule Exec\hskip2em\bf{}77\rm{}}
\hbox{\hskip3em\hskip20pt 11.11\hskip1em Auditing RuleSets\hskip2em\bf{}77\rm{}}
\hbox{\hskip3em\hskip0pt 12\hskip1em Using the Loops System\hskip2em\bf{}79\rm{}}
\hbox{\hskip3em\hskip20pt 12.1\hskip1em Starting up the System\hskip2em\bf{}79\rm{}}
\hbox{\hskip3em\hskip20pt 12.2\hskip1em The Loops Screen Setup\hskip2em\bf{}79\rm{}}
\hbox{\hskip3em\hskip20pt 12.3\hskip1em Using the Browser\hskip2em\bf{}80\rm{}}
\hbox{\hskip3em\hskip40pt 12.3.1\hskip1em Using the Class Browser\hskip2em\bf{}80\rm{}}
\hbox{\hskip3em\hskip40pt 12.3.2\hskip1em Building Your Own Browser\hskip2em\bf{}83\rm{}}
\hbox{\hskip3em\hskip20pt 12.4\hskip1em Editing in Loops\hskip2em\bf{}86\rm{}}
\hbox{\hskip3em\hskip40pt 12.4.1\hskip1em Editing a Class\hskip2em\bf{}86\rm{}}
\hbox{\hskip3em\hskip40pt 12.4.2\hskip1em Editing an Instance\hskip2em\bf{}87\rm{}}
\hbox{\hskip3em\hskip40pt 12.4.3\hskip1em Editing a Method\hskip2em\bf{}88\rm{}}
\hbox{\hskip3em\hskip20pt 12.5\hskip1em Inspecting in Loops\hskip2em\bf{}88\rm{}}
\hbox{\hskip3em\hskip40pt 12.5.1\hskip1em Inspecting Classes\hskip2em\bf{}88\rm{}}
\hbox{\hskip3em\hskip40pt 12.5.2\hskip1em Inspecting Instances\hskip2em\bf{}88\rm{}}
\hbox{\hskip3em\hskip20pt 12.6\hskip1em Errors in Loops\hskip2em\bf{}89\rm{}}
\hbox{\hskip3em\hskip40pt 12.6.1\hskip1em When the Object is Not Recognized\hskip2em\bf{}89\rm{}}
\hbox{\hskip3em\hskip40pt 12.6.2\hskip1em When the Selector is Not Recognized\hskip2em\bf{}89\rm{}}
\hbox{\hskip3em\hskip20pt 12.7\hskip1em Breaking and Tracing Methods\hskip2em\bf{}90\rm{}}
\hbox{\hskip3em\hskip20pt 12.8\hskip1em Monitoring Variable Access\hskip2em\bf{}90\rm{}}
\hbox{\hskip3em\hskip0pt 13\hskip1em The LOOPS Kernel\hskip2em\bf{}91\rm{}}
\hbox{\hskip3em\hskip20pt 13.1\hskip1em The Golden Braid (Object, Class, MetaClass)\hskip2em\bf{}91\rm{}}
\hbox{\hskip3em\hskip20pt 13.2\hskip1em Perspectives and Nodes\hskip2em\bf{}91\rm{}}
\hbox{\hskip3em\hskip20pt 13.3\hskip1em Useful Mixins\hskip2em\bf{}92\rm{}}
\hbox{\hskip3em\hskip20pt 13.4\hskip1em The MetaClass Named "Class"\hskip2em\bf{}93\rm{}}
\hbox{\hskip3em\hskip20pt 13.5\hskip1em The Class Named "Object"\hskip2em\bf{}96\rm{}}
\hbox{\hskip3em\hskip20pt 13.6\hskip1em Functions for changing Loops Structure\hskip2em\bf{}98\rm{}}
\hbox{\hskip3em\hskip40pt 13.6.1\hskip1em Moving and Renaming Methods\hskip2em\bf{}98\rm{}}
\hbox{\hskip3em\hskip40pt 13.6.2\hskip1em Moving and Renaming Variables\hskip2em\bf{}99\rm{}}
\hbox{\hskip3em\hskip0pt 14\hskip1em Loops and the Interlisp System\hskip2em\bf{}100\rm{}}
\hbox{\hskip3em\hskip20pt 14.1\hskip1em Saving Class and Instance Definitions on Files\hskip2em\bf{}100\rm{}}
\hbox{\hskip3em\hskip20pt 14.2\hskip1em Classes for Lisp Datatypes\hskip2em\bf{}100\rm{}}
\hbox{\hskip3em\hskip20pt 14.3\hskip1em Some Details of the Loops implementation\hskip2em\bf{}100\rm{}}


\vfill\end