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