将符号变量与许多值进行比较
问题描述:
我想将包含符号的变量与许多值进行比较,以便如果它们中的任何一个匹配变量,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事实,而不是进行函数调用。
谢谢你的答案加里。我在第61页的CLIPS用户指南中找到了答案。 谢谢 –