deftemplate 构造可以在槽中有另一个模板吗?

Can a deftemplate construct have another template in a slot?

我有一个定义如下的模板:

(deftemplate fact
    (slot name)
    (multislot field)
    (multislot value))

我可以将上面的 fact 定义为另一个模板中的 slot/multislot 吗?

例如:

(deftemplate collection1
    (slot fact1))

(deftemplate collection2
    (slot fact1)
    (slot fact2))

在上述所需模板中,每个插槽事实都应属于已定义模板事实。我想要这样的collection 许多插槽。或者至少期望的结果是使用类似于 fact 模板的字段断言 collection。 这样我就可以在名称、字段和值之间有一个逻辑上的 link。

(collection2
    (fact1 (name 'ID')
        (field 'Name' 'Company' 'Role')
        (value 'Bob' 'ABC' 'Admin'))
    (fact2 (name 'Event')
        (field 'Name' 'Place')
        (value 'Conference' 'USA')))

预期结果 : CLIPS 可以断言上述递归事实。这是否可能,或者问题的任何替代方案。

提前致谢。

当然可以,您也可以将插槽类型限制为具体的事实地址。

(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>))