将符号变量与许多值进行比较

问题描述:

我想将包含符号的变量与许多值进行比较,以便如果它们中的任何一个匹配变量,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 

这是做了正确的方式?

由于

优选地使用这样的:

(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用户指南中找到了答案。 谢谢 –