1

そのため、Scheme を使用した Make-memory プログラムの実装について助けが必要です。「書き込み」と「読み取り」の 2 つのメッセージが必要です。つまり、(mymem 'write 34 -116) と (mymem 'read 99) のようになりますよね? and (define 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))

はい、これは割り当てですが、このコードを書きました。助けや指示が必要なだけです。はい、可変長引数リストについては知っています。

4

3 に答える 3

2

あなたが参加しているクラスは、How To Design Programsのデザイン レシピを使用していますか?

もしそうなら、あなたはステップ1にいるようです.

そうでない場合: 一連の例を使用して探している動作を指定し、それらをテスト ケースに変換できますか?

于 2010-01-19T00:20:36.917 に答える
0

必要なものはmake-vector.

于 2010-01-13T23:55:48.307 に答える
0

(cons n 0)エラーと思われる 2 つの場所と(cons (- n 1) 0) 、リストではなく n または n-1 を 0 に変換しているため、(0 . 0) を取得しているのはそのためです。

于 2010-11-04T20:46:30.863 に答える