1

所以我需要一些帮助来实现使用 Scheme 的 Make-memory 程序。我需要两条消息“写”和“读”。所以它会像 (mymem 'write 34 -116) 和 (mymem 'read 99) 对吗?和 (define mymem (make-memory 100)) .....我将如何在方案中实现它?使用 Alist???我需要一些帮助来编码它。我有这段代码,它使 make-memory 成为一个过程,当你运行 mymem 时,你会得到((99.0)),我需要做的是重复这个,所以我得到一个带有点对的 alist 到((0.0))。那么关于如何编码的任何建议?有没有人知道我可以做些什么来重复和使消息写入和阅读?

(define make-memory
  (lambda (n)
    (letrec ((mem '())
             (dump (display mem)))
      (lambda ()
        (if (= n 0)
            (cons (cons n 0) mem) mem)
            (cons (cons (- n 1) 0) mem))
      (lambda (msg loc val)
        (cond
          ((equal? msg 'read) (display 
                               (cons n val))(set! n (- n 1)))
          ((equal? msg 'write) (set! mem 
                                     (cons val loc)) (set! n (- n 1)) (display mem)))))))


(define mymem (make-memory 100))

是的,这是一个作业,但我写了这段代码。我只是需要一些帮助或指导。是的,我确实知道可变长度参数列表。

4

3 回答 3

2

您正在使用设计配方的课程是如何设计程序吗?

如果是这样,看起来你已经迈出了第一步。

如果不是:您能否使用一组示例指定您正在寻找的行为,然后将它们转化为测试用例?

于 2010-01-19T00:20:36.917 回答
0

两个地方似乎是错误的(cons n 0)(cons (- n 1) 0) 这就是你得到 (0 . 0)s 的原因,因为你将 n 或 n-1 放在 0 上,而不是列表。

于 2010-11-04T20:46:30.863 回答
0

看来你需要的是make-vector.

于 2010-01-13T23:55:48.307 回答