If statement CLIPS-if then else函数给出[CSTRCPSR1]错误

If statement CLIPS-if then else函数给出[CSTRCPSR1]错误,if-statement,clips,If Statement,Clips,以下是错误摘要: CLIPS> (load "C:/Users/labor/Desktop/Witek/projekt.CLP") Defining defrule: R1 +j+j Defining defrule: R2 +j+j Defining defrule: R3 =j+j+j Defining defrule: imie-if =j=j+j+j [CSTRCPSR1] Expected the beginning of a construct. 这是我的CLIPS程序的代

以下是错误摘要:

CLIPS> (load "C:/Users/labor/Desktop/Witek/projekt.CLP")
Defining defrule: R1 +j+j
Defining defrule: R2 +j+j
Defining defrule: R3 =j+j+j
Defining defrule: imie-if =j=j+j+j

[CSTRCPSR1] Expected the beginning of a construct.
这是我的CLIPS程序的代码。基本上,如果名字和姓氏与亚伯拉罕·林肯不同,我希望它的反应有所不同

(defrule R1
(initial-fact)
=>
(printout t "Enter your name:" crlf)
(bind ?name (read))
(assert (name ?name)))

(defrule R2
(name ?name)
=>
(printout t "Enter your last name" crlf)
(bind ?lastnm (read))
(assert (lastnm ?lastnm)))

(defrule R3
(and(name ?name)(lastnm ?lastnm))
=>
(printout t "How old are you " ?name "?" crlf)
(bind ?age (read))
(assert (age ?age)))

(defrule name-if
(name ?name)(lastnm ?lastnm)(age ?age)
=>
(if(and(eq ?name Abraham)(eq ?lastnm Lincoln))
then (printout t "Hello " ?name " " ?lastnm ", you are " ?age " years old bro" crlf))
else (printout t "Hello " ?name " " ?lastnm ", you are " ?age " years old" crlf)))
我从一些网页上复制了if语句逻辑,我不太确定在这种情况下,“eq”代表什么。。。如果您能另外解释一下它的作用,我将不胜感激

问候,,
W

导致问题的then子句末尾有一个额外的右括号。Mac OS和Window CLIPS IDE有一个平衡命令,您可以使用该命令查看括号在构造中是否正确平衡。只需在构件内部单击并多次应用“平衡”命令,直到选中整个构件。如果按then关键字和balance放置光标,您将看到If语句被then子句末尾的括号关闭,而else子句悬空

正确的规则是:

(defrule name-if
   (name ?name)
   (lastnm ?lastnm)
   (age ?age)
   =>
   (if (and (eq ?name Abraham)
            (eq ?lastnm Lincoln))
      then 
      (printout t "Hello" ?name " " ?lastnm ", you are " ?age " years old bro" crlf)
      else 
      (printout t "Hello " ?name " " ?lastnm ", you are " ?age " years old" crlf)))

eq谓词是equals的缩写。与需要数值参数的=谓词不同,eq比较任何类型的值。

Big。此外,它看起来像name if应该是,例如name_,如果as“-”作为运算符处理。连字符可以用作符号的一部分。当用作运算符时,需要分隔符(如括号)或两边的空格。不需要在没有其他条件的情况下将初始事实添加到规则中;它会自动添加到版本6.3之前的剪辑版本中。最初的事实功能在6.3版本中被弃用;它仍然由重置断言,但无条件的规则不再依赖它。在6.4版本中,初始事实不再被断言,因此显式匹配此事实的规则将不再被激活。