Память схемы PLT - PullRequest
       10

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

1 голос
/ 14 января 2010

Так что мне нужна помощь в реализации программы 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))

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

Ответы [ 3 ]

2 голосов
/ 19 января 2010

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

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

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

0 голосов
/ 04 ноября 2010

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

0 голосов
/ 14 января 2010

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

...