2017-09-04 12 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))) 

위의 예에서는 employee id를 두 번 입력했습니다. 직원 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를 생성하거나 UUID를 생성하기 위해 C를 호출하는 사용자 정의 함수를 작성하십시오. –

+0

이것은 의미가 있습니다. 감사..!! –