首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MIT方案传递报文等级表

MIT方案传递报文等级表
EN

Stack Overflow用户
提问于 2012-11-28 06:25:02
回答 1查看 216关注 0票数 2

目前,作为任务的一部分,我正在尝试编写一个方案程序,它接受3条消息,'get-student-average 'get-assignment-average'add-grade,并根据需要返回信息。'add-grade基本上给出了按顺序插入的学生id、作业和成绩。我仍然在处理学生和作业平均消息(因此前面有分号),但当我尝试运行它时,'add-grade消息总是失败。它一直说成绩是一个未绑定的变量。这是我测试它的代码:

代码语言:javascript
复制
(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中的表一样,诀窍在于将列表作为列表附加到空值,然后设置它。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-28 06:30:55

你的代码有几个问题。对于初学者来说,您实际上并不是在检查正在接收的是什么消息(应该有一个cond或一系列嵌套的if或某个case )。而且您没有返回dispatcher过程。在这里,试着这样开始:

代码语言:javascript
复制
(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)

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13594272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档