麻省理工学院传递信息方案等级表



目前,作为任务的一部分,我正在尝试编写一个方案程序,该程序接受'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))

我不确定我做错了什么,试图用它来获取信息。我认为,就像scheme中的表一样,诀窍是将列表作为列表附加到一个null值,然后设置它

还有很多其他的测试用例(包括'average消息的一些),但我没有包括它们,因为我觉得它只是在重复更多相同的内容。我觉得我应该提到的另一件事是,所有的测试用例都放在一个列表中,从'(开始,到)结束。

您的代码有几个问题。对于初学者来说,您实际上并不是在检查接收到的消息(应该有一个cond或一系列嵌套的ifcase)。而且你没有返回调度程序。在这里,试试这个开始:

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

此外,出于测试目的,您应该添加第四条消息来返回列表。

最新更新