2013年7月1日月曜日

開発環境

計算機プログラムの構造と解釈(Gerald Jay Sussman(原著)、Julie Sussman(原著)、Harold Abelson(原著)、和田 英一(翻訳)、ピアソンエデュケーション、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力, オブジェクトおよび状態)、3.1(代入と局所状態)、3.1.2(代入を取り入れた利点)の問題 3.6を解いてみる。

その他参考書籍

問題 3.6

コード(BBEdit)

sample.scm

(define (rand-update x)
  (let ((a 2)
        (b 10)
        (m 11))
    (remainder (+ (* a x) b) m)))

(define random-init 0)

(define rand
  (let ((x random-init))
    (define (generate)
      (set! x (rand-update x))
      x)
    (define (reset new-value)
      (set! x new-value)
      x)
    (define (dispatch m)
      (cond ((eq? m 'generate) (generate))
            ((eq? m 'reset) reset)
            (else error "Unkown request -- RAND"
                        m)))
    dispatch))

入出力結果(Terminal, REPL(Read, Eval, Print, Loop))

1 ]=> (rand 'generate)

;Value: 10

1 ]=> (rand 'generate)

;Value: 8

1 ]=> (rand 'generate)

;Value: 4

1 ]=> (rand 'generate)

;Value: 7

1 ]=> (rand 'generate)

;Value: 2

1 ]=> (rand 'generate)

;Value: 3

1 ]=> (rand 'generate)

;Value: 5

1 ]=> (rand 'generate)

;Value: 9

1 ]=> (rand 'generate)

;Value: 6

1 ]=> (rand 'generate)

;Value: 0

1 ]=> (rand 'generate)

;Value: 10

1 ]=> (rand 'generate)

;Value: 8

1 ]=> (rand 'generate)

;Value: 4

1 ]=> (rand 'generate)

;Value: 7

1 ]=> (rand 'generate)

;Value: 2

1 ]=> ((rand 'reset) 0)

;Value: 0

1 ]=> (rand 'generate)

;Value: 10

1 ]=> (rand 'generate)

;Value: 8

1 ]=> (rand 'generate)

;Value: 4

1 ]=> (rand 'generate)

;Value: 7

1 ]=> (rand 'generate)

;Value: 2

1 ]=> ((rand 'reset) 7)

;Value: 7

1 ]=> (rand 'generate)

;Value: 2

解答のrandはいいとして、rand-updateの実装が微妙な気がする。

0 コメント:

コメントを投稿