Jess (programming language)
This article needs additional citations for verification. (March 2012) |
Developer(s) | Sandia National Laboratories |
---|---|
Initial release | 1995 |
Stable release | 7.1p2
/ November 5, 2008 |
Written in | Java |
Platform | Java |
License | Proprietary, public domain |
Website | www |
Jess is a rule engine for the Java computing platform, written in the Java programming language. It was developed by Ernest Friedman-Hill of Sandia National Laboratories.[1] It is a superset of the CLIPS language.[1] It was first written in late 1995.[1] The language provides rule-based programming for the automation of an expert system, and is often termed as an expert system shell.[1] In recent years, intelligent agent systems have also developed, which depend on a similar ability.
Rather than a procedural paradigm, where one program has a loop that is activated only one time, the declarative paradigm used by Jess applies a set of rules to a set of facts continuously by a process named pattern matching. Rules can modify the set of facts, or can execute any Java code. It uses the Rete algorithm[1] to execute rules.
License
[edit]The licensing for Jess is freeware for education and government use, and is proprietary software, needing a license, for commercial use. In contrast, CLIPS, which is the basis and starting code for Jess, is free and open-source software.
Code examples
[edit]Code examples:
; is a comment
(bind ?x 100)
; x = 100
(deffunction max (?a ?b)
(if (> ?a ?b) then ?a else ?b))
(deffacts myroom
(furniture chair)
(furniture table)
(furniture bed)
)
(deftemplate car
(slot color)
(slot mileage)
(slot value)
)
(assert (car (color red) (mileage 10000) (value 400)))
Sample code:
(clear)
(deftemplate blood-donor (slot name) (slot type))
(deffacts blood-bank ; put names & their types into [[working memory]]
(blood-donor (name "Alice")(type "A"))
(blood-donor (name "Agatha")(type "A"))
(blood-donor (name "Bob")(type "B"))
(blood-donor (name "Barbara")(type "B"))
(blood-donor (name "Jess")(type "AB"))
(blood-donor (name "Karen")(type "AB"))
(blood-donor (name "Onan")(type "O"))
(blood-donor (name "Osbert")(type "O"))
)
(defrule can-give-to-same-type-but-not-self ; handles A > A, B > B, O > O, AB > AB, but not N1 > N1
(blood-donor (name ?name)(type ?type))
(blood-donor (name ?name2)(type ?type2 &:(eq ?type ?type2) &: (neq ?name ?name2) ))
=>
(printout t ?name " can give blood to " ?name2 crlf)
)
(defrule O-gives-to-others-but-not-itself ; O to O cover in above rule
(blood-donor (name ?name)(type ?type &:(eq ?type "O")))
(blood-donor (name ?name2)(type ?type2 &: (neq ?type ?type2) &: (neq ?name ?name2) ))
=>
(printout t ?name " can give blood to " ?name2 crlf)
)
(defrule A-or-B-gives-to-AB ; case O gives to AB and AB gives to AB already dealt with
(blood-donor (name ?name)(type ?type &:(or (eq ?type "A") (eq ?type "B" ))))
(blood-donor (name ?name2)(type ?type2 &: (eq ?type2 "AB") &: (neq ?name ?name2) ))
=>
(printout t ?name " can give blood to " ?name2 crlf)
)
;(watch all)
(reset)
(run)
See also
[edit]Related systems
[edit]- CLIPS: public-domain software tool to build expert systems
- ILOG rules: business rule management system
- JBoss Drools: business rule management system (BRMS)
- Prolog: general purpose logic programming language
- OpenL Tablets: business centric rules and BRMS
- DTRules: decision table based, open-source rule engine for Java
References
[edit]- ^ a b c d e Hemmer, Markus C. (2008). Expert Systems in Chemistry Research. CRC Press. pp. 47–48. ISBN 9781420053241. Retrieved March 30, 2012. ISBN 978-1-4200-5323-4
Further sources
[edit]- Friedman-Hill, Ernest (2003). Jess in Action: Rule Based Systems in Java. Manning Publications. ISBN 9781930110892. Retrieved March 30, 2012. ISBN 1-930110-89-8