CLIPS is a productive development and delivery expert system tool which provides a complete environment for the construction of rule and/or object based expert systems. Created in 1985, CLIPS is now widely used throughout the government, industry, and academia. Its key features are:
Knowledge Representation: CLIPS provides a cohesive tool for handling a wide variety of knowledge with support for three different programming paradigms: rule-based, object-oriented and procedural. Rule-based programming allows knowledge to be represented as heuristics, or "rules of thumb," which specify a set of actions to be performed for a given situation. Object-oriented programming allows complex systems to be modeled as modular components (which can be easily reused to model other systems or to create new components). The procedural programming capabilities provided by CLIPS are similar to capabilities found in languages such as C, Java, Ada, and LISP.
Portability: CLIPS is written in C for portability and speed and has been installed on many different operating systems without code changes. Operating systems on which CLIPS has been tested include Windows XP, MacOS X, and Unix. CLIPS can be ported to any system which has an ANSI compliant C or C++ compiler. CLIPS comes with all source code which can be modified or tailored to meet a user's specific needs.
Integration/Extensibility: CLIPS can be embedded within procedural code, called as a subroutine, and integrated with languages such as C, Java, FORTRAN and ADA. CLIPS can be easily extended by a user through the use of several well-defined protocols.
Interactive Development: The standard version of CLIPS provides an interactive, text oriented development environment, including debugging aids, on-line help, and an integrated editor. Interfaces providing features such as pulldown menus, integrated editors, and multiple windows have been developed for the Mac OS X, Windows XP, and X Window environments.
Verification/Validation: CLIPS includes a number of features to support the verification and validation of expert systems including support for modular design and partitioning of a knowledge base, static and dynamic constraint checking of slot values and function arguments, and semantic analysis of rule patterns to determine if inconsistencies could prevent a rule from firing or generate an error.
Fully Documented: CLIPS comes with extensive documentation including a Reference Manual and a User's Guide.
Low Cost: CLIPS is maintained as public domain software.
CLIPS executables, documentation, source code, and examples can be downloaded from the Download Page of the CLIPS Project on SourceForge.
Performance Improvements - Rule performance has been improved particularly in situations with large numbers of fact/instances or partial matches.
64-bit Integers - Integers in CLIPS are now represented using the "long long" C data type which provides a minimum of 64 bits of precision.
Reset after Clear - A reset command is now performed after a clear command (which includes the clear command issued internally by CLIPS when it is started). Since no user constructs will be present after a clear, the primary effect of this behavior is to create the initial-fact and initial-object.
Pattern Addition - The initial-fact and initial-object patterns are no longer used in triggering rules. When printing partial matches, the * symbol is used to indicate a not or exists pattern that is satisfied.
Module Specifiers - A module specifier can be used in expressions to reference a deffunction or defgeneric that is exported by a module, but not specifically imported by the module which is referencing it.
Instance Name and Class Visibility - Instance names now have global scope and must be unique regardless of their module. Instances of classes that are not in scope can be created if the module name is specified as part of the class name. Messages can be sent to instances regardless of whether the instance class is in scope.
Command Prompt - Local variables bound at the command prompt using the bind function persist until a reset or clear command is issued.
MicroEMACS Editor - The built-in editor is no longer supported.
Help Functions - The help and help-path funtions are no longer supported.
Printout Function - The deprecated use of the symbol t as a substitute for the crlf symbol is no longer allowed.
Command and Function Changes - The matches command and open function have modified behavior.
New Functions and Commands - The foreach and operating-system functions have been added.
Behavior Changes - A defgeneric redefinition warning is no longer printed when a defmethod is defined.
Copies of CLIPS executables, documentation, and source code downloaded from the CLIPS Project on SourceForge are subject to the following license agreement:
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
There are a number of sources describing applications built using CLIPS:
A bibliography list of CLIPS related books, papers, and articles is contained in Appendix J of the CLIPS Basic Programming Guide.
Proceedings of the Third CLIPS Conference, held in 1994, are available in PDF.
The Proceedings of the First, Fourth, and Fifth Innovative Applications of Artificial Intelligence also contain descriptions of applications built using CLIPS ("An Intelligent Training System for Space Shuttle Flight Controllers" and "Space Shuttle Telemetry Monitoring" in the First, "HUB SIAASHING: A Knowledge-Based System for Severe, Temporary Airline Schedule Reduction" in the Fourth, and "PI-in-a-Box: A Knowledge-based System for Space Science Experimentation" and "The DRAIR Advisor: A Knowledge-Based System for Materiel Deficiency Analysis" in the Fifth).
Expert Systems: Principles and Programming, 4th Edition, by Giarratano and Riley (ISBN 0-534-38447-1), comes with a CD-ROM containing CLIPS 6.22 executables, source code, and documentation. The first half of the book is theory oriented and the second half covers rule-based, procedural, and object-oriented programming using CLIPS.
Introduction To Expert Systems, 3rd Edition, by Jackson (ISBN 0-201-87686-8), contains numerous CLIPS examples and exercises throughout the book.
The Engineering of Knowledge-based Systems: Theory and Practice, by Gonzalez and Dankel (ISBN 0132 769 409), comes with an MS-DOS executable of version 5.1 of CLIPS. The use of CLIPS isn't integrated throughout the book, but there is a 25 page appendix that describes the fundamentals of using the CLIPS executable bundled with the book.
AdaClips is a semi-thick Ada (95) binding to CLIPS.
CLIPS/Ada version 4.4, available from the Open Channel Foundation, is a version of CLIPS developed entirely in Ada and containing a subset of the features found in the C version of CLIPS. CLIPS/Ada version 4.4 contains all of the features found in CLIPS/C version 4.3, and with the exception of the CLIPS Object-Oriented Language, all of the features found in CLIPS/C version 5.0. There are no plans to update CLIPS/Ada to a more recent version of CLIPS/C.
CAPE is a programming environment that combines the CLIPS rule-based system with the Perl procedural programming language.
The clipsmm library is a C++ interface to CLIPS.
KAPICLIPS is A KQML (Knowledge Query & Manipulation Language) API for CLIPS, developed by Ernest Friedman-Hill.
PHLIPS is a PHP extension that provides a basic interface to the CLIPS environment.
PyCLIPS is a Python module that integrates CLIPS into Python.
TclCLIPS provides a Tcl interface to CLIPS
wxCLIPS, developed by Julian Smart, provides a simple graphical front end to CLIPS 5.1/6.0, and in addition contains a suite of extra functions for creating GUI applications in CLIPS.
ZClips allows Zope to interact with CLIPS.
Yes. Version 6.1 and later can be compiled with either an ANSI C or C++ compiler. However, the CLIPS source code only uses features that are available in both the ANSI C and C++ standards. Since the object extensions of C++ are not part of the ANSI C standard, they are not utilized in the CLIPS source code. CLIPS 6.3 comes with starter projects which demonstrate how to build a C++ library.
The clipsmm library is a C++ interface to CLIPS.
There are several DLLs available for use with CLIPS:
The origins of CLIPS date back to 1984 at NASA's Johnson Space Center. At this time, the Artificial Intelligence Section had developed over a dozen prototype expert systems applications using state-of-the-art hardware and software. However, despite extensive demonstrations of the potential of expert systems, few of these applications were put into regular use. This failure to provide expert systems technology within NASA's operational computing constraints could largely be traced to the use of LISP as the base language for nearly all expert system software tools at that time.
The Artificial Intelligence Section felt that the use of a conventional language, such as C, would eliminate most of these problems. Although a number of tool vendors started converting their tools to run in C, the cost of each tool was still very high, most were restricted to a small variety of computers, and the projected availability times were discouraging. To meet all of its needs in a timely and cost effective manner, it became evident that the Artificial Intelligence Section would have to develop its own C based expert system tool.
The prototype version of CLIPS was developed in 1985. Particular attention was given to making the tool compatible with expert systems under development at that time. Thus, the syntax of CLIPS was made to very closely resemble the syntax of a subset of the ART expert system tool developed by Inference Corporation. Although originally modelled from ART, CLIPS was developed entirely without assistance from Inference or access to the ART source code.
The original intent for CLIPS was to gain useful insight and knowledge about the construction of expert system tools and to lay the groundwork for the construction of a replacement tool for the commercial tools currently being used. Version 1.0 demonstrated the feasibility of the project concept. After additional development, it became apparent that CLIPS would be a low cost expert system tool ideal for the purposes of training. Another year of development and internal use went into CLIPS improving its portability, performance, functionality, and supporting documentation. Version 3.0 of CLIPS was made available to groups outside of NASA in the summer of 1986.
Further enhancements transformed CLIPS from a training tool into a tool useful for the development and delivery of expert systems as well. Versions 4.0 and 4.1 of CLIPS, released respectively in the summer and fall of 1987, featured greatly improved performance, external language integration, and delivery capabilities. Version 4.2 of CLIPS, released in the summer of 1988, was a complete rewrite of CLIPS for code modularity. Also included with this release were an architecture manual providing a detailed description of the CLIPS software architecture and a utility program for aiding in the verification and validation of rule-based programs. Version 4.3 of CLIPS, released in the summer of 1989, added still more functionality.
Originally, the primary representation methodology in CLIPS was a forward chaining rule language based on the Rete algorithm (hence the Production System part of the CLIPS acronym). Version 5.0 of CLIPS, released in the spring of 1991, introduced two new programming paradigms: procedural programming (as found in languages such as C and Ada;) and object-oriented programming (as found in languages such as the Common Lisp Object System and Smalltalk). The object-oriented programming language provided within CLIPS is called the CLIPS Object-Oriented Language (COOL). Version 5.1 of CLIPS, released in the fall of 1991, was primarily a software maintenance upgrade required to support the newly developed and/or enhanced X Window, MS-DOS, and Macintosh interfaces. Version 6.0, released in the Spring of 1993, added fully integrated object/rule pattern matching and support features for rule-based software engineering.
In the mid 1990s the focus of the Artifical Intelligence Section (now the Software Technology Branch) shifted away from expert system technology. The principle developers subsequently left NASA. CLIPS is now maintained independently from NASA as public domain software by one of the original program authors. The first public domain release of CLIPS, version 6.1 in 1998, removed support for older non-ANSI C Compilers and added support for C++ compilers. Commands to profile the time spent in constructs and user-defined functions were also added. Version 6.2, released in the Spring of 2002, added support for multiple environments into which programs can be loaded and improved Windows XP and MacOS development interfaces.
CLIPS is an interesting example of technology transfer between the government and private sectors. Syntactically, CLIPS traces its origins to Inference's ART which traced the origins of its rule-based language to OPS5. Later, CLIPS was used by Inference to develop ART-IM (which later became ARTEnterprise, by The Haley Enterprise to develop Eclipse (which later became HaleyRules), and by Production Systems Technology to develop CLIPS/R2. Other languages, such as Jess, adopted syntax similar to ART and CLIPS. This has created a family of tools that share the same basic syntax for the definition of rules. While the features and capabilities of these tools has diverged sufficiently that porting an application taking full advantage of a tool's complete feature set is non-trivial, it's still possible if one uses a restricted subset of features to write portable programs that will run with few if any simple changes.
Version 6.4 will target unicode support; improved integration with other languages (such as C++, .NET, and Java); development environments for .NET, Java, and Mac OS; and examples for common use cases.
Yes and no. It depends on what you mean by a real time application.
If you want guaranteed response time, then the answer is no. Generally speaking, the more robust the pattern matching capabilities of a tool, the more difficult it is to guarantee real time response.
If you need built-in functionality that allows you reason about events as they occur over time, then the answer is no. Many tools designed for real time applications provide features that allow you (among other things) to schedule rules to be checked at a particular time or on a particular time interval, specify how long data is valid, determine trends in data (such as whether it's increasing or decreasing), and synchronize the execution of tasks. In addition, some tools provide extensive facilities for the "non AI" related aspects of developing a real time application such as the graphical interface, simulation, and data acquisition. It's possible to use CLIPS to reason about events as they occur over time--It's just not a built-in feature. You can, for example, add an additional slot to facts which stores their creation time and then use rules which reason based on the contents of this slot.
If by real time you mean that the application is able to keep up with the data as it is received, then the answer is maybe. Almost all expert system tools can keep up with a real time system that only requires decisions to be made in minutes/hours/days. Response time tends to become an issue only when large amounts of data are being processed or decisions are required in seconds or fractions of a second.
CLIPS is based on the Rete pattern matching algorithm. The efficiency of this algorithm is based on the assumption that data changes slowly over time (e.g. a single rule firing affects < 5% of all facts). This assumption would appear to fail miserably for monitoring applications (as well as other applications where rapid data change can occur). If, for example, you have 100 facts representing various sensor values and the sensor values change every second, you have very rapid data changes (assuming you don't have thousands and thousands of facts of other types). It's often possible to comply with the Rete assumption by preprocessing data. For example, if a sensor value changes from 10 to 10.1 and this change is not significant, then it's not necessary to retract the old fact and assert a new fact with the changed sensor value. Another preprocessing approach would be to convert numeric values to symbolic values such as low, nominal, and high and then to retract the old fact and assert a new one only if the symbolic value changed. The major drawback to this approach is that you generally have to write C code to preprocess the data and keep track of pointers to facts so that facts can later be retracted by the preprocessor--Of course if you're dealing with real-time data, you're probably writing some C code anyway.
Virtually all of the system defined functions that come ready to use with CLIPS utilize the same programming interface that you have to use to define your own functions. Look through files in the CLIPS source code such as bmathfun.c, iofun.c, miscfun.c, prdctfun.c, emathfun.c, filecom.c, and multifun.c for examples.
A run-time program will not run any faster than a program loaded using the load or bload commands. The constructs-to-c command used to generate a run-time program creates files containing the C data structures that would dynamically be allocated if the load or bload command was used. With the exception of some initialization routines, the constructs-to-c command does not generate any executable code. The primary benefits of creating a run-time program are: applications can be delivered as a single executable file; loading constructs as part of an executable is faster than loading them from an text or binary file; the CLIPS portion of the run-time program is smaller because the code needed to parse constructs can be discarded; and less memory is required to represent your program's constructs since memory for them is statically rather than dynamically allocated.
There are no plans to write a 6.X Architecture Manual. Copies of the CLIPS 5.1 Architecture Manual are still bundled with the CLIPS documentation.
Inquiries about consulting, training, or other employment opportunities can be sent to firstname.lastname@example.org.
Back to CLIPS Home Page.
|Last Update February 14, 2016|