可以创建变量然后在 LHS 上使用吗?

Can variables be created then used on the LHS?

我正在尝试学习 CLIPS,这是一个非常基本的问题。我有两个人的事实 (person (name "jim")(age 22)) and (person (name "sally")(age 32)) 我只是想要一个规则来打印出谁年纪大,或者断言一些事实,比如 ( older (name “xxx”))。 我在尝试

(defrule compare "is jim older"
( person ( name "jim")(age ?jims_age))
( person ( name "sally")( age ?sallys_age))
(> ?jims_age ?sallys_age)
=>
(printout t "jim is older" crlf))
 

永远不会激活。那么比较吉姆和莎莉年龄的正确方法是什么? 我找不到执行此操作的简单示例。

谢谢!

您需要使用测试条件元素。

(defrule compare "is jim older"
  (person (name "jim") (age ?jims_age))
  (person (name "sally") (age ?sallys_age))
  (test (> ?jims_age ?sallys_age))
  =>
  (printout t "jim is older" crlf))

您的规则已通用:

(defrule compare "Compare two persons' age"
  (person (name ?name1) (age ?age1))
  (person (name ?name2) (age ?age2))
  (test (and (neq ?name1 ?name2) 
             (> ?age1 ?age2)))
  =>
  (printout t ?name1 " is older than " ?name2 crlf))

Basic Programming Guide5.4.2 Test Conditional Element 章节中解释。