Память схемы PLT

Поэтому мне нужна помощь в реализации программы Make-memory с использованием Scheme. Мне нужно два сообщения "написать и" прочитать. Так что это будет похоже на (mymem 'написать 34-116) и (mymem' read 99) правильно? и (определить mymem (make-memory 100)) ..... Как мне реализовать это в схеме? используя Alist ??? Мне нужна помощь в его кодировании. У меня есть этот код, который делает make-memory процедурой, и когда вы запускаете mymem, вы получаете ((99.0)), и что мне нужно сделать, это повторить это, поэтому я получаю список с пунктирными парами до ((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))

Да, это задание, но я написал этот код. Мне просто нужна помощь или направление. И да, я знаю о списках аргументов переменной длины.


person Eric    schedule 13.01.2010    source источник
comment
Есть несколько возможностей, но похоже, что это домашнее задание. Если да, то какие у вас есть ограничения? Можете ли вы использовать любые функции, которые вам нужны, или только те, о которых вы знаете? То же самое для языковых функций - знаете ли вы о списках аргументов переменной длины?   -  person Noah Lavine    schedule 15.01.2010
comment
Это ЗАПАХИТ, как домашнее задание, даже без упоминания схемы PLT.   -  person John R. Strohm    schedule 15.01.2010


Ответы (3)


Использует ли ваш класс Рецепт дизайна а-ля Как разрабатывать программы?

Если так, похоже, вы на первом этапе.

Если нет: можете ли вы указать поведение, которое вы ищете, используя набор примеров, а затем превратить их в тестовые примеры?

person John Clements    schedule 19.01.2010

Кажется, что вам нужно make-vector.

person Eli Barzilay    schedule 13.01.2010

Два места, которые кажутся ошибками (cons n 0) и (cons (- n 1) 0) Вот почему вы получаете (0,0) s, поскольку вы превращаете n или n-1 в 0, а не список.

person Theo Belaire    schedule 04.11.2010