開発環境
- OS X Lion - Apple(OS)
- Emacs、BBEdit - Bare Bones Software, Inc. (Text Editor)
- プログラミング言語: MIT/GNU Scheme
計算機プログラムの構造と解釈(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 コメント:
コメントを投稿