【发布时间】:2019-06-08 01:30:31
【问题描述】:
我正在尝试从多槽中获取值并将其动态分配给变量。
假设我们有如下模板:
(fact (slot name)
(multislot field)
(multislot value))
(fact2 (slot field)
(slot value))
那么可以有这样的规则:
(rule
(fact (name ?name)
(field $?field)
(value $?value))
;if length of field and value is greater than 0
(fact2 (field ?field1)
(value ?value1))
;if length of field and value is greater than 1
(fact2 (field ?field2)
(value ?value2))
;if length of field and value is greater than 2
(fact2 (field ?field3)
(value ?value3))
;if length of field and value is greater than 3
(fact2 (field ?field4)
(value ?value4))
=>
(assert (all field:values found))
这里 fact 可以只有一个字段值对或最多 4 个。我想要一个通用的单一规则,可用于动态地从多槽中提取所有可用值。
我猜在上面的规则中,我们不仅需要提取值,还需要实现if length > 0、else-if等语句。
所以如果输入是:
(fact (name Employee)
(field Name Role Department Company)
(value Bob Admin Security ABC))
(fact2 (field Name)
(value Bob))
(fact2 (field Role)
(value Admin))
(fact2 (field Department)
(value Security))
(fact2 (field Company)
(value ABC))
那么预期的输出将是:
(all field:value pairs found)
同时
(fact (name Employee)
(field Name Role)
(value Bob Admin))
(fact2 (field Name)
(value Bob))
(fact2 (field Role)
(value Admin))
虽然同样的规则也应该符合上述事实。这可能吗?或者有没有其他解决方案?
提前谢谢你。
【问题讨论】:
标签: clips