【问题标题】:MIT Scheme Passing Messages Grade Table麻省理工学院方案传递信息等级表
【发布时间】:2023-04-06 18:35:01
【问题描述】:

目前,作为作业的一部分,我正在尝试编写一个接收 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 消息的测试用例),但我没有包括它们,因为我觉得它只是在重复更多相同的东西。我觉得我应该提到的另一件事是,所有的测试用例都放在一个列表中,以'( 开头,以) 结尾。

【问题讨论】:

    标签: scheme message procedure


    【解决方案1】:

    您的代码存在一些问题。对于初学者,您实际上并没有检查正在接收什么消息(应该有一个cond 或一系列嵌套的ifs 或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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      相关资源
      最近更新 更多