2012-04-25 50 views
2

我有一個名爲Person的模板,此模板有眼睛,手,身體和其他插槽。但是這些插槽中的每一個都是其他模板。
那麼如何定義其他模板類型的模板的插槽?
以及如何定義事實?如何在jess中定義另一個模板類型的插槽

下面是一個例子是我主:

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

定義模板的人不工作就是這樣,我不知道如何定義事實

感謝

回答

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))) 
+0

但我不知道如何界定個人模板的插槽(它不工作設置類型的眼睛)? 以及如何定義關於人的事實? – Ruba 2012-04-25 22:25:04

+0

插槽類型僅用於與CLIPS的兼容性;它不適用於Jess的任何事情。只是不要填寫它。我會編輯我的答案,以顯示如何斷言事實。 – 2012-04-25 22:40:50

+0

非常感謝,但我只想知道這是否是唯一正確的方法?沒有斷言眼睛的事實,我不能做到這一點? – Ruba 2012-04-25 23:05:57

相關問題