Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme MIT方案传递消息等级表_Scheme_Message_Procedure - Fatal编程技术网

Scheme MIT方案传递消息等级表

Scheme MIT方案传递消息等级表,scheme,message,procedure,Scheme,Message,Procedure,目前,作为作业的一部分,我正在尝试编写一个scheme程序,该程序接受3条消息,“获取学生平均成绩”获取作业平均成绩和“添加分数,并根据需要返回信息”AddGrade基本上给出了按顺序插入的学生id、作业和成绩。我仍在处理学生和作业平均值消息,因此前面有分号,但当我尝试运行它时,始终失败的是“添加分数消息”。它一直说成绩是一个不受约束的变量。这是我正在测试的代码: (define (make-grades) (define T '()) (define (dispatch op)

目前,作为作业的一部分,我正在尝试编写一个scheme程序,该程序接受3条消息,“获取学生平均成绩”获取作业平均成绩和“添加分数,并根据需要返回信息”AddGrade基本上给出了按顺序插入的学生id、作业和成绩。我仍在处理学生和作业平均值消息,因此前面有分号,但当我尝试运行它时,始终失败的是“添加分数消息”。它一直说成绩是一个不受约束的变量。这是我正在测试的代码:

(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中的表一样,诀窍在于将列表作为列表附加到空值,然后设置它


还有很多其他的测试用例,包括一些针对“平均消息”的测试用例,但我没有包括它们,因为我觉得它只是重复了更多相同的测试用例。我觉得我应该提到的另一件事是,所有的测试用例都放在一个列表中,以'开头,以'结尾。

您的代码有几个问题。对于初学者来说,您实际上并不是在检查接收到的消息,而是应该有一个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)

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

您的代码有几个问题。对于初学者来说,您实际上并不是在检查接收到的消息,而是应该有一个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)
此外,出于测试目的,您应该添加第四条消息以返回列表