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

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 事实而不是进行函数调用。