2011-12-14 14 views
0

私は計算結果の一部を保存するためのテンプレートを構築しようとしていたので、私は初期化のためにこれを作った:deftemplateを使用して結果をCLIPSに保存するにはどうすればよいですか?

(deftemplate tempAlumne 
    (slot nota-media-total) 
    (slot nota-media-obligatorias) 
    (slot nota-media-optativas) 
    (slot nota-media-ales) 
) 

(deffacts tempAlumneFacts 
    (tempAlumne 
     (nota-media-total -1) 
     (nota-media-obligatorias -1) 
     (nota-media-optativas -1) 
     (nota-media-ales -1) 
    ) 
) 

そして、私は、値を格納するためにその構造を使用しようとしているが、私はそれを必要とします多くのルールからアクセスできるように、私はそれをグローバルにすることに決めました。 ?私は(ここで私が注意-メディア合計を割り当てる)* TMPA *は初期値を持っているし、変更を各1を割り当てたいが、それは言うので、「

(defrule calcula-nota-media "" 
    (not calcula-nota-media ok) 
    ?*tmpA* <- (tempAlumne) 

    => 
    (bind ?llista_convocs (send ?*alumne* get-IConvocatoria)) 
    (bind ?suma 0) 
    (bind ?i 0) 
    (while(< ?i (length$ ?llista_convocs)) do 
     (bind ?convoc_actual (nth$ ?i ?llista_convocs)) 
     (bind ?suma (+ ?suma (send ?convoc_actual get-Nota))) 
     (bind ?i (+ ?i 1)) 
    ) 
    (/)  
    (modify (?*tmpA* (nota-media-total (/ ?suma ?i)) 
    (assert calcula-nota-media ok) 
) 

:だから私はこのような値を格納しようとしました[PRNTUTIL2]構文エラー:defruleの適切な構文を確認してください。 "、何が間違っているのか、間違ったパスをとっているのか分かりません。

答えて

1

基本的な構文については、「ユーザーズガイド」で読むことをお勧めします。いくつかのエラーを修正しました:

(defrule calcula-nota-media "" 
    (not (calcula-nota-media ok)) 
    ?tmpA <- (tempAlumne) 
    => 
    (bind ?llista_convocs (send ?*alumne* get-IConvocatoria)) 
    (bind ?suma 0) 
    (bind ?i 0) 
    (while(< ?i (length$ ?llista_convocs)) do 
     (bind ?convoc_actual (nth$ ?i ?llista_convocs)) 
     (bind ?suma (+ ?suma (send ?convoc_actual get-Nota))) 
     (bind ?i (+ ?i 1)) 
    ) 
    ; (/) What's this for? 
    (modify ?tmpA (nota-media-total (/ ?suma ?i))) 
    (assert (calcula-nota-media ok)) 
) 
関連する問題