在CLIPS专家系统中找到关系

时间:2014-05-16 17:32:32

标签: expert-system 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)))

1 个答案:

答案 0 :(得分: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>