2014-05-16 33 views
0

如何使用CLIPS在家族樹中找到兩個或更多家族成員之間的關係。我試過這個規則,但它不起作用。我有一個語法錯誤。在CLIPS專家系統中找到關係

是否有任何提示以避免錯誤。

(defrule Family 
    (FamilyTree ?L-name ?F-name) 
     => 
     (assert(FamilyTree ?L-name ?F-name(read)) 
     (printout t ?L-name "is parent of" ?F-name crlf))) 
+0

您應該包含確切的錯誤。 – stevesliva

+0

[PRNTUTIL2]語法錯誤:檢查deftemplate模式的適當語法。 – Rana

+0

你是否遺漏了一個括號(assert(FamilyTree?L-name?F-name(read))? – Evans

回答

0

似乎有一些關鍵信息從你的問題中缺失。您發佈的代碼段正確加載。只有當我添加FamilyTree deftemplate時,纔會出現您描述的錯誤。如果在規則中使用deftemplate事實,則必須使用需要指定插槽名稱的deftemplate事實的語法。

CLIPS> (clear) 
CLIPS> 
(defrule Family 
    (FamilyTree ?L-name ?F-name) 
    => 
    (assert(FamilyTree ?L-name ?F-name(read)) 
    (printout t ?L-name "is parent of" ?F-name crlf))) 
CLIPS> (clear) 
CLIPS> (deftemplate FamilyTree (slot last-name) (slot first-name)) 
CLIPS> 
(defrule Family 
    (FamilyTree ?L-name ?F-name) 
    => 
    (assert(FamilyTree ?L-name ?F-name(read)) 
    (printout t ?L-name "is parent of" ?F-name crlf))) 

[PRNTUTIL2] Syntax Error: Check appropriate syntax for deftemplate patterns. 

ERROR: 
(defrule MAIN::Family 
    (FamilyTree ?L-name 
CLIPS>