CLAIRE was designed for advanced applications that involve complex data modeling, rule processing
and problem solving. CLAIRE was meant to be used in a C++ environment, either as a satellite
(linking CLAIRE programs to C++ programs is straightforward) or as an upper layer (importing
C++ programs is also easy). The key set of features that distinguishes CLAIRE from other
programming languages has been dictated by our experience in solving complex optimization problems.
Of particular interest are two features that distinguish CLAIRE from procedural languages such as
C++ or Java :
- Versioning : CLAIRE supports versioning of a user-selected view of the entire system.
The view can be made as large (for expressiveness) or as small (for efficiency) as is necessary.
Versions are created linearly and can be viewed as a stack of snapshots of the system. CLAIRE
supports very efficient creation/rollback of versions, which constitutes the basis for powerful
backtracking, a key feature for problem solving. Unlike most logic programming languages, this
type of backtracking covers any user-defined structure, not simply a set of logic variables.
- Production rules : CLAIRE supports rules that bind a CLAIRE expression (the conclusion) to
the combination of an event and a logical condition. Whenever this event occurs, if the condition
is verified, then the conclusion is evaluated. The emphasis on events is a natural evolution from
rule-based inference engines and is well suited to the description of reactive algorithms such as
constraint propagation.