جييس (لغة برمجة)

**جييس **هو محرك قاعدة لمنصة جافا طورها  من مختبرات سانديا الوطنية. وهي نسخة مطورة من لغة برمجة . كتبت في أواخر عام 1995. تزود هذه اللغة البرمجة المنطقية لأجل تلقائية النظام الخبير وغالبا يطلق عليها هيكل الانظمة الخبيرة. في السنوات الاخيرة، تم تطوير انظمة الوكيل الذكي والذي يعتمد على قدرة مماثلة.

بدلاً من البرمجة الأمرية، حيث يحتوي برنامج واحد على حلقة يتم تنشيطها مرة واحدة فقط، يطبق التموذج التعريفي الذي يستخدمه جييس باستمرار مجموعة من القواعد على مجموعة من الحقائق من خلال عملية تسمى مطابقة النمط. يمكن للقواعد ان تعدل مجموعة الحقائق، أو يمكن ان يطبق أي جافا كود. يستخدم خوارزمية الريتي لتنفيذ القواعد.

## الرخصة
بينما رخصت سليبس كبرمجية مفتوحة المصدر، جييس ليست برمجية مفتوح المصدر. هي مجانية للاستخدام التعليمي والحكومي لكن يجب الحصول على رخصة لاستخدامها للأنظمة التجارية.

## أمثلة على شيفرة

```lisp
; 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)))
```

أمثلة برمجة:


```lisp
(clear)
(deftemplate blood-donor (slot name) (slot type))
(deffacts blood-bank ; put names & their types into [[ذاكرة عاملة]]
          (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)
```

## انظر ايضاً

* JSR-94
### انظمة مشابهة

* سليبس: أداة برمجيات المجال العام لبناء أنظمة خبيرة.
* قواعد لوج: نظام إدارة قواعد العمل.
* JBoss Drools: نظام إدارة قواعد الأعمال.
* برولوغ: لغة برمجة منطقية للأغراض العامة.
* أقراص أوبنل اللوحية: قواعد الأعمال المركزية وBRMS.
* DTRules: محرك قاعدة مفتوح المصدر قائم على جدول القرار لجافا.

## المصادر

## روابط خارجية

الموقع الرسمي

تصنيف:مختبرات سانديا الوطنية