제스 (프로그래밍 언어)

제스(Jess)는 샌디아 국립 연구소의 에른스트 프리드먼-힐(Ernest Friedman-Hill)이 개발한 자바 (프로그래밍 언어) 플랫폼용 룰 엔진이다. CLIPS 프로그래밍 언어의 상위 집합이다. 1995년 후반에 처음 작성되었다. 이 언어는 전문가 시스템의 자동화를 위한 규칙 기반 프로그래밍을 제공하며 흔히 전문가 시스템 셸이라고 불린다. 최근에는 유사한 기능에 의존하는 지능형 에이전트 시스템도 개발되었다.

단일 프로그램에 한 번만 활성화되는 루프가 있는 절차적 패러다임 대신 제스가 사용하는 선언적 패러다임은 패턴 일치라는 프로세스를 통해 사실 모음에 규칙 모음을 지속적으로 적용한다. 규칙은 팩트 컬렉션을 수정하거나 자바 코드를 실행할 수 있다. 리트(Rete) 알고리즘을 사용하여 규칙을 실행한다.

 코드 예시 
 is a comment

(bind ?x 100)

 x = 100

(deffunction max (?a ?b)
             (if (> ?a ?b) then ?a else ?b))

(deffacts myroom
          (furniture chair)
          (furniture table)
          (furniture bed)
          )

(deftemplate car
             (slot color)
             (slot mileage)
             (slot value)
             )

(assert (car (color red) (mileage 10000) (value 400)))
</syntaxhighlight>
샘플 코드:
(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)

 같이 보기 
 프롤로그 (프로그래밍 언어)

 외부 링크 
 Official Website

분류:전문가 시스템
분류:지식 표현 언어
분류:자바 API