Разработчик(и) | Национальные лаборатории Сандия |
---|---|
Первоначальный выпуск | 1995 ( 1995 ) |
Стабильный релиз | 7.1p2 / 5 ноября 2008 г. ( 2008-11-05 ) |
Написано в | Ява |
Платформа | Ява |
Лицензия | Запатентованная , общественная собственность |
Веб-сайт | www.jessrules.com |
Jess — это механизм правил для вычислительной платформы Java , написанный на языке программирования Java . Он был разработан Эрнестом Фридманом-Хиллом из Sandia National Laboratories . [1] Это надмножество языка CLIPS . [1] Впервые он был написан в конце 1995 года . [1] Язык обеспечивает программирование на основе правил для автоматизации экспертной системы и часто называется оболочкой экспертной системы . [1] В последние годы также были разработаны интеллектуальные агентские системы, которые зависят от аналогичной способности.
Вместо процедурной парадигмы , где одна программа имеет цикл , который активируется только один раз, декларативная парадигма, используемая Jess, применяет набор правил к набору фактов непрерывно с помощью процесса, называемого сопоставлением с образцом . Правила могут изменять набор фактов или выполнять любой код Java. Для выполнения правил используется алгоритм Rete [1] .
Лицензирование Jess является бесплатным программным обеспечением для образования и государственного использования, и является проприетарным программным обеспечением , требующим лицензии, для коммерческого использования. В отличие от этого, CLIPS, который является основой и начальным кодом для Jess, является бесплатным и открытым программным обеспечением .
Примеры кода:
; это комментарий( связать ?x 100 ) ; х = 100( deffunction max ( ?a ?b ) ( if ( > ?a ?b ) then ?a else ?b )) ( дефакты моя комната ( мебель стул ) ( мебель стол ) ( мебель кровать ) ) ( deftemplate car ( слот цвет ) ( слот пробег ) ( слот стоимость ) ) ( assert ( автомобиль ( цвет красный ) ( пробег 10000 ) ( стоимость 400 )))
Пример кода:
( clear ) ( deftemplate blood-donor ( slot name ) ( slot type )) ( deffacts blood-bank ; поместить имена и их типы в [[рабочую память]] ( 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 ; обрабатывает A > A, B > B, O > O, AB > AB, но не N1 > N1 ( донор крови ( имя ? имя )( тип ? тип )) ( донор крови ( имя ? имя2 )( тип ? тип2 &: ( eq ? тип ? тип2 ) &: ( neq ? имя ? имя2 ) )) => ( распечатка t ? имя " может сдать кровь " ? имя2 crlf ) ) ( defrule O-дает-другим-но-не-себе ; O to O охватывается в правиле выше ( донор крови ( имя ? имя )( тип ? тип &:( eq ?type "O" ))) ( донор-крови ( имя ?name2 )( тип ?type2 &: ( neq ?type ?type2 ) &: ( neq ?name ?name2 ) )) => ( printout t ?name " может сдать кровь " ?name2 crlf ) ) ( defrule A-or-B-gets-to-AB ; случай O дает AB, а AB дает AB уже рассмотрен ( 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 " может сдать кровь " ?name2 crlf ) ) ;( watch all) ( reset ) ( run )