2010-01-13 53 views
1

所以我需要一些幫助來實現使用Scheme的Make-memory程序。我需要兩條消息'寫入'和'讀取'。所以它會像(mymem'寫34 -116)和(mymem'讀99)是對的?和(定義mymem(make-memory 100)).....我將如何在計劃中實現這一點?使用Alist ???我需要一些幫助編碼它。我有這樣的代碼使得make-memory成爲一個過程,當你運行mymem時你得到了((99.0)),我需要做的就是重複這個,所以我得到了一個虛線對((0.0))的alist。所以,有關如何編碼的建議?有沒有人有任何想法我可以做什麼來重複和製造消息寫和讀?PLT方案內存

(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)) 

是的,這是一個任務,但是我寫了這個代碼。我只需要一些幫助或方向。是的,我知道可變長度參數列表。

+0

有幾種可能性,但似乎這可能是作業。如果是這樣,你有什麼限制?你可以使用你想要的任何功能,或者只使用你知道的某些功能嗎?語言功能一樣 - 你知道變長參數列表嗎? – 2010-01-14 23:44:23

+0

即使沒有「PLT計劃」提及,這個SMELLS就像一個家庭作業問題。 – 2010-01-14 23:52:14

回答

0

似乎你需要的是make-vector

2

您正在使用Design Recipe la How To Design Programs的課程嗎?

如果是這樣,它看起來像你在第一步。

如果不是:你可以使用一組示例指定要查找的行爲,然後將它們轉換爲測試用例?這似乎是錯誤

0

兩個地(cons n 0)(cons (- n 1) 0) 這就是爲什麼你得到(0,0)S,因爲你是consing n或n-1到0,而不是一個列表。