Jess (програмски јазик)

***Џес*** () програмскиот јазик е основен механизам за Јава околината - тоа е супер сет од CLIPS програмскиот јазик, развиен од страна на Ernest Friedman-Hill во Sandia националната лабoраторија. Првпат е напишан на крајот на 1995 година.

Тој обезбедува логичко програмирање погодно за автоматизирање на експертни системи, и често се нарекува *околина за развој на експерни системи*. Во последниве години се развиени и интелегентни системи кои се засновани на истите принципи.

Наместо процедурална парадигма, каде што една програма има циклус којшто се активира само еднаш, декларативната парадигма кај *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)

## Поврзано
* Програмски јазик
* CLIPS

## Документација
* Книга за Jess , *Jess in Action: Rule Based Systems in Java*, ISBN 1-930110-89-8

## Надворешни врски
* Официјално мрежно место
* Sandia национална лабoраторија

Категорија:Екпертни системи
Категорија:Програмски јазици
Категорија:Информатика