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

Од Википедија, слободната енциклопедија
Прејди на: содржини, барај
Jess
Програмер: Sandia National Laboratories
Платформа: Java
Намена:
Лиценца: Closed source / Public Domain
Мреж. место: www.jessrules.com

Џес (англиски: 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)

Видете исто така[уреди]

Документација[уреди]

Надворешни врски[уреди]


Програмски јазици
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