{{Short description|Programming language}} {{Refimprove|date=March 2012}}

{{Infobox software | name = Jess | developer = [[Sandia National Laboratories]] | released = {{Start date and age|1995}} | latest release version = 7.1p2 | latest release date = {{Start date and age|2008|11|05}} | programming language = [[Java (programming language)|Java]] | platform = [[Java (software platform)|Java]] | license = [[Proprietary software|Proprietary]], [[public domain]]{{Needs clarification|date=April 2026|reason=Sorry, how can it be both at once?}} }} '''Jess''' is a [[rule engine]] for the [[Java (software platform)|Java]] [[computing platform]], written in the [[Java (programming language)|Java]] [[programming language]]. It was developed by [[Ernest Friedman-Hill]] of [[Sandia National Laboratories]].<ref name="ExpertSystems">{{cite book |last1=Hemmer |first1=Markus C. |date=2008 |url=https://books.google.com/books?id=KepsLbpWe-0C&dq=Jess%2C+Java&pg=PA47 |title=Expert Systems in Chemistry Research |publisher=CRC Press |pages=47–48 |isbn=9781420053241 |access-date=March 30, 2012}} {{ISBN|978-1-4200-5323-4}}</ref> It is a [[superset]] of the [[CLIPS]] language.<ref name="ExpertSystems"/> It was first written in late 1995.<ref name="ExpertSystems"/> The language provides [[rule-based programming]] for the automation of an [[expert system]], and is often termed as an ''expert system shell''.<ref name="ExpertSystems"/> In recent years, [[intelligent agent]] systems have also developed, which depend on a similar ability.

Rather than a [[Imperative programming|procedural paradigm]], where one program has a [[Loop (computing)|loop]] that is activated only one time, the [[Declarative programming|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]]<ref name="ExpertSystems"/> to execute rules.

==License== The [[Software license|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== Code examples: <syntaxhighlight lang="lisp"> ; 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))) </syntaxhighlight> Sample code: <syntaxhighlight lang="lisp"> (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) </syntaxhighlight>

==See also== * [[Semantic reasoner]] * [[Decision Model and Notation]]

===Related systems=== * [[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== {{Reflist}}

===Further sources=== * {{cite book |last1=Friedman-Hill |first1=Ernest |date=2003 |url=https://books.google.com/books?id=-xxjRZhyF0IC&q=Jess+in+Action:+Rule+Based+Systems+in+Java |title=Jess in Action: Rule Based Systems in Java |publisher=Manning Publications |isbn=9781930110892 |access-date=March 30, 2012}} {{ISBN|1-930110-89-8}}

==External links== * {{cite web|url=http://www.jessrules.com|url-status=usurped|archiveurl=https://web.archive.org/web/20111229025816/http://www.jessrules.com/|archive-date=29 December 2011|title=Jess, the Rule Engine for the Java Platform}}

[[Category:Expert systems]] [[Category:Rule engines]] [[Category:Knowledge representation languages]] [[Category:Java APIs]] [[Category:Sandia National Laboratories]] <!-- Hidden categories below --> [[Category:Articles with example Lisp (programming language) code]]