2017-09-04 6 views
0
(deftemplate Employee 
    (slot employee-id) 
    (slot employee-name) 
    (slot Role) 
    (slot Designation)) 

(deffacts Employees 
    (employee (employee-name X) (employee-id 1) (Role CS) (Designation TA)) 
    (employee (employee-name Y) (employee-id 2) (Role CS) (Designation SA)) 
    (employee (employee-name Z) (employee-id 3) (Role CIS) (Designation TA)) 
    (employee (employee-name W) (employee-id 4) (Role SE) (Designation SA)) 
    (employee (employee-name Q) (employee-id 5) (Role CIS) (Designation TA)) 
    (employee (employee-name U) (employee-id 1) (Role CS) (Designation TA))) 

上記の例では、従業員IDを2回入力しました。従業員IDを一意にするにはどうすればよいですか?CLIPS内のスロットに一意の値のみを許可する方法はありますか

答えて

0
CLIPS> (defglobal ?*id* = 0) 
CLIPS> 
(deffunction next-id() 
    (bind ?*id* (+ ?*id* 1))) 
CLIPS> 
(deftemplate employee 
    (slot employee-id (default-dynamic (next-id))) 
    (slot employee-name) 
    (slot Role) 
    (slot Designation)) 
CLIPS> 
(deffacts Employees 
    (employee (employee-name X) (Role CS) (Designation TA)) 
    (employee (employee-name Y) (Role CS) (Designation SA)) 
    (employee (employee-name Z) (Role CIS) (Designation TA)) 
    (employee (employee-name W) (Role SE) (Designation SA)) 
    (employee (employee-name Q) (Role CIS) (Designation TA)) 
    (employee (employee-name U) (Role CS) (Designation TA))) 
CLIPS> (reset) 
CLIPS> (facts) 
f-0  (initial-fact) 
f-1  (employee (employee-id 1) (employee-name X) (Role CS) (Designation TA)) 
f-2  (employee (employee-id 2) (employee-name Y) (Role CS) (Designation SA)) 
f-3  (employee (employee-id 3) (employee-name Z) (Role CIS) (Designation TA)) 
f-4  (employee (employee-id 4) (employee-name W) (Role SE) (Designation SA)) 
f-5  (employee (employee-id 5) (employee-name Q) (Role CIS) (Designation TA)) 
f-6  (employee (employee-id 6) (employee-name U) (Role CS) (Designation TA)) 
For a total of 7 facts. 
CLIPS> 
+0

ここで自動的にシーケンスが生成されます。既存の従業員IDを使用してファクトを入力するべきではありません。 –

+0

重複IDを持つ従業員を削除するルールを作成するか、ファクトクエリー関数を使用して、一意の値を見つけるまで従業員がidとincrement?* id *を持つかどうかを判別するか、gensym *を使用して一意のIDを生成するか、 Cに呼び出してUUIDを生成するユーザー定義関数を作成します。 –

+0

これは意味があります。ありがとう.. !! –

関連する問題