如何使用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 :(得分: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>