可以创建变量然后在 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 Guide 的 5.4.2 Test Conditional Element
章节中解释。
我正在尝试学习 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 Guide 的 5.4.2 Test Conditional Element
章节中解释。