2

我有一个名为 Person 的模板,这个模板有眼睛、手、身体和许多其他插槽。但是这些插槽中的每一个都是其他模板。
那么如何为其他模板类型的模板定义插槽?
以及如何定义事实?

这是我主要的一个例子:

(deftemplate Eyes
(slot colorOfEye (type STRING))
(slot ShapeOfEye (type STRING)))
(deftemplate Person 
(slot eye (type Eyes))
)
(deffacts People
(Person (eye ....))
)
(reset)

定义人模板不是这样工作的,我不知道如何定义事实

谢谢

4

1 回答 1

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)))
于 2012-04-25T21:49:37.673 回答