将符号变量与许多值进行比较
Compare symbol variable to many values
我想将一个包含符号的变量与多个值进行比较,这样,如果其中任何一个与该变量匹配,则 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,因此该规则中的 "or" 是一个 "or" 条件元素。它将尝试匹配 eq 事实而不是进行函数调用。
我想将一个包含符号的变量与多个值进行比较,这样,如果其中任何一个与该变量匹配,则 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,因此该规则中的 "or" 是一个 "or" 条件元素。它将尝试匹配 eq 事实而不是进行函数调用。