Jess (programming language)

From Wikipedia, the free encyclopedia
(Redirected from Jess programming language)
Jump to navigation Jump to search
Jess
DeveloperSandia National Laboratories
Initial release1995; 31 years ago (1995)
Stable release
7.1p2 / November 5, 2008; 17 years ago (2008-11-05)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Written inJava
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    PlatformJava
    LicenseProprietary, public domain
    Websitewww.jessrules.com

    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 | edit source]

    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 | edit source]

    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 | edit source]
    [edit | edit source]

    References

    [edit | edit source]
    1. ^ a b c d e Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).

    Further sources

    [edit | edit source]
    • Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]