2016-05-28 7 views
0

はここで誤るエラーの要約です:クリップ - その後、他の機能が与えられる場合は、[CSTRCPSR1]

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. 

そして、ここでは私のクリッププログラムのコードです。名前と姓がAbraham Lincolnと異なる場合は、基本的には違う反応をしたい。

(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))) 

は、私はいくつかのWebページからif文のロジックをコピーして、私はこのケースでは、「EQ」は何の略か、非常にわからない...あなたはさらにそれの役割を説明することができれば、私は感謝します。

よろしく、あなたが問題を引き起こしているthen節の最後に余分な右括弧を持って

答えて

0

W 。 Mac OSとWindow CLIPS IDEには、カッコが構造内で適切にバランスされているかどうかを確認するために使用できるバランスコマンドがあります。コンストラクト内部をクリックして、コンストラクト全体が選択されるまでバランスコマンドを数回適用します。 thenキーワードとバランスでカーソルを置くと、if文がthen節の終わりにかっこで閉じられ、else節がダングリングしたままになることがわかります。

enter image description here

修正規則は次のとおりです。

(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述語が対等の略です。数値引数を必要とする=述語とは異なり、eqは任意の型の値を比較します。

+0

大きな大きな感謝のゲイリー。さらに、名前のように見えます。実際には、名前が「 - 」の場合は実際には「 - 」と表示されます。 – VitGryfny

+0

ハイフンはシンボルの一部として使用できます。演算子として使用するときは、かっこのようなデリミタかどちらかの側のスペースが必要です。 –

関連する問題