2011-12-14 50 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) 
    ) 
) 

然後我嘗試使用結構來存儲值,但我需要它從許多規則中都可以訪問,所以我決定讓它成爲全球性的。於是,我就保存這樣的價值觀:

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

,因爲我想* TMPA *有初始值,然後分配每一個與修改(這裏我給你諾塔 - 媒體總),但它說「? [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)) 
) 
相關問題