2017-07-24 49 views
0

我想將包含符號的變量與許多值進行比較,以便如果它們中的任何一個匹配變量,CE就會得到滿足。下面是一個小例子:將符號變量與許多值進行比較

(defrule compare-students 
    ?x <- (Student (FirstName ?n)) 
    (or (eq ?n John) (eq ?n Beter) (eq ?n Sarah)) 
    => 
    (modify ?x (SecondName ?n))) 

當我編譯構造文件保存到C代碼,我得到了這樣的事情:

Defining defrule: compare-students +j+j+j 
=j=j+j+j 
=j=j+j+j 

這是做了正確的方式?

由於

回答

1

優選地使用這樣的:

(defrule compare-students 
    ?x <- (Student (FirstName ?n&John | Beter | Sarah) 
       (SecondName ~?n)) 
    => 
    (modify ?x (SecondName ?n))) 

或者交替此:

(defrule compare-students 
    ?x <- (Student (FirstName ?n) 
       (SecondName ~?n)) 
    (test (or (eq ?n John) (eq ?n Beter) (eq ?n Sarah))) 
    => 
    (modify ?x (SecondName ?n))) 

第一使用模式匹配爲了簡潔的約束和第二使用測試條件元素(CE)以表明以下語法是要評估的函數調用,而不是要匹配的模式。在您的原始規則中,您不使用測試CE,因此該規則中的「或」是一個「或」條件元素。它會嘗試匹配eq事實,而不是進行函數調用。

+0

謝謝你的答案加里。我在第61頁的CLIPS用戶指南中找到了答案。 謝謝 –

相關問題