CLIPS
Template:Distinguish Template:Refimprove Template:Infobox programming language CLIPS (C Language Integrated Production System) is a public-domain software tool for building expert systems. The syntax and name were inspired by Charles Forgy's OPS5. The first versions of CLIPS were developed starting in 1985 at the NASA Johnson Space Center (as an alternative for existing system ART*Inference) until 1996, when the development group's responsibilities ceased to focus on expert system technology. The original name of the project was NASA's AI Language (NAIL).
As of 2005, CLIPS was probably the most widely used expert system tool.<ref>Template:Cite conference</ref> CLIPS is written in C, extensions can be written in C, and CLIPS can be called from C. Its syntax resembles that of the programming language Lisp.<ref name="giarratano">Template:Cite book</ref>
CLIPS incorporates a complete object-oriented programming language for writing expert systems. COOL combines the programming paradigms of procedural, object oriented, and logic programming (automated theorem proving) languages.<ref name="vol1">Template:Cite book</ref>
Facts and rulesEdit
CLIPS uses forward chaining.<ref name="water"/><ref name="giarratano"/> Like other expert system languages, CLIPS deals with rules and facts. Various facts can make a rule applicable. An applicable rule is then fired.<ref name="water">Template:Cite journal</ref> Facts and rules are created by first defining them, as shown below: <syntaxhighlight lang="lisp">
(deftemplate car_problem (slot name) (slot status))
(deffacts trouble_shooting (car_problem (name ignition_key) (status on)) (car_problem (name engine) (status wont_start)) (car_problem (name headlights) (status work)))
(defrule rule1 (car_problem (name ignition_key) (status on)) (car_problem (name engine) (status wont_start)) => (assert (car_problem (name starter) (status faulty))))
</syntaxhighlight> Having set this up, the (reset) command causes CLIPS to read the facts and rules. In this case, that would lead to the three "trouble_shooting" facts being asserted. Then the (run) command is used. Given that the two facts listed in rule1 have both been asserted, the conditions for doing its action have been met so the additional fact is asserted as a result of the run. <syntaxhighlight lang="lisp"> CLIPS> (reset) CLIPS> (agenda) 0 rule1: f-1,f-2 For a total of 1 activation. CLIPS> (facts) f-0 (initial-fact) f-1 (car_problem (name ignition_key) (status on)) f-2 (car_problem (name engine) (status wont_start)) f-3 (car_problem (name headlights) (status work)) For a total of 4 facts. CLIPS> (run) CLIPS> (facts) f-0 (initial-fact) f-1 (car_problem (name ignition_key) (status on)) f-2 (car_problem (name engine) (status wont_start)) f-3 (car_problem (name headlights) (status work)) f-4 (car_problem (name starter) (status faulty)) For a total of 5 facts. CLIPS> (assert <fact>+)
(Assert (object (name "chair")
(Material wood) (height 3feet) (Color brown)) CLIPS(retract <fact-index+) (retract 0) for a color </syntaxhighlight>
In CLIPS, salience allows a user to assign priority (or weight) to a rule.
DescendantsEdit
Descendants of the CLIPS language include Jess (rule-based portion of CLIPS rewritten in Java, it later grew in a different direction),<ref>Template:Cite journal "Jess was originally inspired by the CLIPS expert system shell, but has grown into a complete, distinct Java-influenced environment of its own."</ref> and FuzzyCLIPS (which adds concept of relevancy into the language).
See alsoEdit
ReferencesEdit
External linksEdit
- Template:Official website, downloads, information, news, history
- CLIPS expert system tool: a candidate for the Diagnostic System engine
- CLIPS tutorial on Code Project
- Template:GitHub, code editor for CLIPS