Jess (програмски јазик)
Џес (англиски: Jess) програмскиот јазик е основен механизам за Јава околината - тоа е супер сет од CLIPS програмскиот јазик, развиен од страна на Ernest Friedman-Hill во Sandia националната лабoраторија. Првпат е напишан на крајот на 1995 година.
Jess | |
Програмер: | Sandia National Laboratories |
---|---|
Платформа: | Java |
Намена: | |
Лиценца: | Closed source / Public Domain |
Мреж. место: | www.jessrules.com |
Тој обезбедува логичко програмирање погодно за автоматизирање на експертни системи, и често се нарекува околина за развој на експерни системи. Во последниве години се развиени и интелегентни системи кои се засновани на истите принципи.
Наместо процедурална парадигма, каде што една програма има циклус којшто се активира само еднаш, декларативната парадигма кај Jess се однесува на збирка од правила за собирање на факти преку процес наречен шема на совпаѓање. Правилата може да ја менуваат колекцијата на факти, или може да го извршат секој Јава код.
Jess може да се користи за создавање на Јава сервлети,EJBs,аплети, и апликации кои користат знаења во форма на декларативни правила со кои можат да се извлечат заклучоци и да се донесат заклучоци. Бидејќи многу правила може да одговорат на многу влезови, има неколку ефективни намени на алгоритмите за совпаѓање. Основниот механизам на Jess го користи Rete алгоритмот.
Лиценца
уредиДодека CLIPS е лиценциран како софтвер со отворен код , Jess не е слободен софтвер. Jess е слободен за образовни и владини употреби, но за комерцијални употреби потребна е лиценца.
Примери
уредиПример за коментар:
; is a comment
Доделување на вредност:
(bind ?x 100) ; x = 100
Дефинирање на функција:
(deffunction max (?a ?b) (if (> ?a ?b) then ?a else ?b))
За да не ги внесуваме постојано истите факти се користи конструктот deffacts како во примерот:
(deffacts myroom (furniture chair) (furniture table) (furniture bed) )
Создавање на урнек:
(deftemplate car (slot color) (slot mileage) (slot value) )
Додавање на податоци во листата со факти:
(assert (car (color red) (mileage 10000) (value 400)))
Пример код:
(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)
Поврзано
уредиДокументација
уреди- Книга за Jess , Jess in Action: Rule Based Systems in Java, ISBN 1-930110-89-8
Надворешни врски
уреди
Програмски јазици |
Ada | ALGOL | APL | Асемблер | AWK | BASIC | C | C++ | C# | COBOL | ColdFusion | Common Lisp | Delphi | Eiffel | Focus | Forth | FORTRAN | Haskell | IDL | Java | JavaScript | Limbo | Lisp | Lua | Modula 2 | Objective C | OCaml | Pascal | Perl | PHP | Prolog | Python | Ruby | SAS | Scheme | Smalltalk | SQL | Tcl | Visual Basic |