我有一个名为Person的模板,这个模板有眼睛,手,身体和其他许多插槽。但是这些插槽中的每一个都是其他模板 那么如何为其他模板类型的模板定义插槽呢? 以及如何定义事实?
这是我主要的一个例子:
(deftemplate Eyes
(slot colorOfEye (type STRING))
(slot ShapeOfEye (type STRING)))
(deftemplate Person
(slot eye (type Eyes))
)
(deffacts People
(Person (eye ....))
)
(reset)
定义Person模板不是这样的,我不知道如何定义事实
由于
答案 0 :(得分:2)
您必须将它们定义为单独的模板。然后,您可以在主要事实中存储fact-id
或“子事实”的其他标识符,然后使用该值将主要事实模式与“子事实”模式结合起来:
(defrule blue-eyed-person
(person (name ?name) (eyes ?eyes))
?eyes <- (eyes (color blue))
=>
(printout t ?name " has blue eyes." crlf))
或者
(defrule blue-eyed-person
(person (name ?name) (eyes ?eyes))
(eyes (id ?eyes) (color blue))
=>
(printout t ?name " has blue eyes." crlf))
首先要创建事实,您可以说
(bind ?eyes (assert (eyes (color blue))))
(assert (person (name Fred) (eyes ?eyes)))