2012-11-27 74 views
2

目前,作爲一項任務的一部分,我試圖編寫一個計劃程序,接受3個消息,'get-student-average'get-assignment-average'add-grade,並根據需要返回信息。 'add-grade基本上給出了學生的ID,作業和成績,因爲它是按照該順序插入的。我仍在研究學生和作業平均消息(因此在他們面前的分號),但是當我試圖運行它時,失敗的消息是'add-grade消息。它一直在說成績是一個不受約束的變量。這是我與測試它的代碼:我不知道麻省理工學院計劃通過消息等級表

(define (make-grades) 
    (define T '()) 
    (define (dispatch op) 
    ((eq? op 'add-grade) (lambda(id as gr) (set! T (append T (list (list id as gr) 
    ))))) 
    ;((eq? op 'get-student-average) (lambda(x) ())) 
    ;((eq? op 'get-assignment-average) 
)) 

(define grades (make-grades)) 
((grades 'add-grade) 7 1 85)) 

它是什麼,我做錯了,試圖找回與信息。我認爲,與方案中的表格一樣,訣竅在於將列表作爲列表附加到空值,然後設置它。

還有一堆其他的測試用例(包括一些用於'average消息),但我沒有包含它們,因爲我覺得它只是重複更多。我覺得我應該提到的另一件事是所有的測試案例都在一個列表中,從'(開始並以)結尾。

回答

4

您的代碼有幾個問題。對於初學者來說,你實際上並沒有檢查收到什麼消息(應該有cond或一系列嵌套的if或某個case)。並且你沒有返回調度程序。在這裏,試試這個開始:

(define (make-grades) 
    (define T '()) 
    (define (dispatch op) 
    (cond ((eq? op 'add-grade) 
      (lambda (id as gr) 
      (set! T (append T (list (list id as gr)))))) 
      ;((eq? op 'get-student-average) (lambda(x) ())) 
      ;((eq? op 'get-assignment-average) 
     )) 
    dispatch) 

此外,你應該添加第四條消息返回列表,出於測試目的。

+1

謝謝奧斯卡,這真的幫了我。 – CodeRook

相關問題