我有一个定义如下的模板:
(deftemplate fact
(slot name)
(multislot field)
(multislot value))
我可以将上面定义的 fact 定义为另一个模板中的插槽/多插槽吗?
例如:
(deftemplate collection1
(slot fact1))
(deftemplate collection2
(slot fact1)
(slot fact2))
在上述所需模板中,每个插槽事实都应具有定义的模板事实。我想有这样的收藏 插槽数量很多。或者至少期望的结果是使用类似于 fact 模板的字段声明 collection 。 这样我就可以在名称,字段和值之间建立逻辑链接。
(collection2
(fact1 (name 'ID')
(field 'Name' 'Company' 'Role')
(value 'Bob' 'ABC' 'Admin'))
(fact2 (name 'Event')
(field 'Name' 'Place')
(value 'Conference' 'USA')))
预期结果:CLIPS可以断言上述递归事实。这是可能的,还是该问题的任何替代方法。
谢谢。
答案 0 :(得分:1)
当然可以,也可以将插槽类型限制为特定的事实地址。
(deftemplate fact
(slot name)
(multislot field)
(multislot value))
(deftemplate collection
(slot fact (type FACT-ADDRESS)))
(assert (collection (fact (assert (fact (name "ID")
(field "Name" "Company" "Role")
(value "Bob" "ABC" "Admin"))))))
事实清单:
(facts)
f-0 (initial-fact)
f-1 (fact (name "ID") (field "Name" "Company" "Role") (value "Bob" "ABC" "Admin"))
f-2 (collection (fact <Fact-1>))