2

Person というテンプレートがあり、このテンプレートには目、手、体、およびその他の多くのスロットがあります。ただし、これらのスロットはそれぞれ別のテンプレートです。
では、他のテンプレート タイプのテンプレートのスロットを定義するにはどうすればよいでしょうか??
そして、事実をどのように定義するのですか??

これが私が主なものの例です:

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

Person テンプレートの定義がこのように機能せず、事実を定義する方法がわかりません

ありがとう

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 に答える