Skip to content

Latest commit

 

History

History
107 lines (76 loc) · 5.58 KB

README.md

File metadata and controls

107 lines (76 loc) · 5.58 KB

"Even in our sleep, pain which cannot forget falls drop by drop upon the heart, until, in our own despair, against our will, comes wisdom through the awful grace of God." -- Aeschylus

Always Remember

Welcome to the Lisa Project

Lisa is a production-quality, forward-chaining expert-system shell. The inference engine is an optimized, literal implementation of Charles Forgy's Rete algorithm, a very efficient mechanism for solving the difficult many-to-many matching problem1. Lisa is written in modern Common Lisp, the Common Lisp Object System (CLOS), and the Meta Object Protocol (MOP); it may be easily integrated into just about any Common Lisp application with little effort.

A unique behavior of Lisa is the ability to reason over CLOS objects without imposing special class hierarchy requirements; thus it should be possible to easily augment existing CLOS applications with reasoning capabilities. As Lisa is an extension to Common Lisp, the full power of the Lisp environment is always available. Lisa-enabled applications should run on any ANSI-compliant Common Lisp platform.

Supported Lisps

Lisa is known to run on the following ANSI Common Lisp implementations:

  • SBCL
  • LispWorks
  • Allegro Common Lisp (ACL)
  • CLISP
  • CMUCL (19a)
  • OpenMCL
  • Armed Bear Common Lisp (ABCL)

Current Status

In December 2024, Lisa completed a re-home from SourceForge to GitHub. Just about every file was touched in some form, and some aspects of the directory structure were reorganized. In addition, during my ten-year absence from Lisa it appears a number of odd bugs had been introduced that required repair. I've done that (see Credits).

Several new features have been added to "modernize" Lisa (eg. logging support). Best of all, I've spent the past several months profiling Lisa's behavior using the Slime/SBCL deterministic profiling interface. Several hot-spots were discovered, and optimizations were done to these areas.

Examples

Lisa successfully loads and runs on SBCL 2.4.11; see here for a few examples of classic AI problems runnable using Lisa.

Recent Features

  • Support for Quicklisp. I've submitted Lisa for inclusion in the Quicklisp project registry; just waiting to hear back. In the meantime, see ql.lisp for installation details.
  • Logger selected: log4cl.
  • Log messages inserted into strategic points, replacing format/error forms.
  • Significant optimizations using Slime and SBCL's deterministic profiler.
  • Fixed the long-broken TEST and LOGICAL conditional elements.
  • Ported auto-notification to SBCL.

Upcoming Plans

After taking an eleven-year hiatus, as of December 2024 I decided to resume work on Lisa, adding some modern features and capabilities. The fundamental architecture will not change, as I'm quite happy with it. But, Lisa will get attention with the following:

  • Fully integrate Lisa with Quicklisp.
  • Further performance optimizations, particularly around the token stack.
  • Other minor ambitions yet to be determined.

While Lisa is currently being actively developed using SBCL, some testing has been performed using AllegroExpress - the free version of Allegro Common Lisp - with perfect results. The core code here represents Lisa version 3.2 as found on Sourceforge, which should run properly on the Lisp implementations mentioned above.

Note: I've long considered adding additional conditional elements to Lisa, to bring it in line with the latest CLIPS releases. However, after studying some of the unpleasant behavioral side effects, and reflecting on how seldom I might have wanted an OR, FORALL, etc. CE when writing expert systems, I've decided against adopting them. I will stay within Lisa's bounds of simplicity; IMHO these CEs are a syntactic convenience only, and not worth the trouble.

Documentation

Please see the Lisa Wiki page for complete details and documentation. In particular, read the Getting Started section first for details on using SBCL with Emacs.

References

Accolades

Over the years, serveral individuals have contributed to aspects of Lisa that either addressed bugs or added useful functionality. I've lost touch with most of them, but they deserve mention here.

  • Aneil Mallavarapu: Aneil contributed several enhancements and bug fixes.
  • Paolo Amoroso: Paolo was a big fan of Lisa, and shared his thoughts within the Open Source community. He also gets credit for suggesting I add support for Certainty Factors. I thank him for his review.
  • Paul Werkowski: Paul contributed code that helped get Lisa running on SBCL.

Credits

  • gassechen: Gaston has exercised and uncovered several Lisa bugs that must have crept in while I was absent for the past ten years. Thank you!
  • cdmojoli: Identified an issue with auto-notification and SBCL. Thank you!

Author

David E. Young

Footnotes

  1. "Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern Match Problem" Charles L. Forgy, Artificial Intelligence 19(1982), 17-37.