【发布时间】:2019-06-05 02:49:27
【问题描述】:
我有许多键:值对,例如 Company:ABC、Role:Admin 等。我想编写一个通用规则,以便可以使用这些对值搜索事实。目前,我下面的规则只是搜索事实中的值,但不能以这样的方式绑定来比较 company:ABC in rule fact 和 company:ABC in provided fact。
我有一些关于员工的事实(动态)如下:
Format: Employee
FormatData:
[ Name: Bob,
Role: Admin,
Company: ABC]
还有一个事实(规则):(这里的规则是动态变化的。所以规则应该很笼统。)
Format: Rule
FormatData:
[ Format: Employee,
Field: Company
Value: ABC
]
我现在的代码:
(deftemplate rule
(multislot fact1)
(multislot fact2))
(deftemplate fact
(slot name)
(multislot field)
(multislot value))
(defrule reasoning
(rule (fact1 ?name1 ?field1 ?value1)
(fact2 ?name2 ?field2 ?value2))
(fact (name ?name1) (field $? ?field1 $?) (value $? ?value1 $?))
(fact (name ?name2) (field $? ?field2 $?) (value $? ?value2 $?))
=>
(assert (worked))
提供的事实:
(rule (fact1 'Employee' 'company' 'ABC')
(fact2 'Event' 'Place' 'USA'))
(fact (name 'Employee') (field 'Name' 'Company' 'Role') (value 'Bob' 'ABC' 'Admin'))
(fact (name 'Event') (field 'Place') (value 'USA'))
预期输出:
(worked)
但是使用此规则和模板,即使是员工姓名为 ABC 和公司 bob 的事实也会触发该规则。 我希望这样的规则与公司:ABC 应该只匹配公司:ABC 实际上是员工。而且,我想要 规则是一般性的,不限于员工、事件等。
【问题讨论】:
标签: clips