2014-05-16 34 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>