2014年8月29日金曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の3(標準部品化力、オブジェクトおよび状態)、3.5(ストリーム)、3.5.5(関数的プログラムの部品化度とオブジェクトの部品化度)、問題 3.81.を解いてみる。

その他参考書籍

問題 3.81.

コード(BBEdit, Emacs)

sample81.scm

#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-

(load "./stream.scm")

(define (rand-update x)
  (modulo (+ x 12345) 67890))

(define random-init 1)

(define rand-numbers
  (lambda (m)
    (cond ((eq? m 'generate)
           (cons-stream random-init
                        (stream-map rand-update (rand-numbers 'generate))))
          ((eq? m 'reset)
           (lambda (new-value)
             (cons-stream new-value
                          (stream-map rand-update (rand-numbers 'generate)))))
          (else
           (error "Need generate or reset -- RAND-NUMBERS")))))


(stream-for-each
 (lambda (n)
   (print (stream-ref (rand-numbers 'generate) n)))
 (stream-enumerate-interval 0 10))

(print "reset----------")
(stream-for-each
 (lambda (n)
   (print (stream-ref ((rand-numbers 'reset) 10) n)))
 (stream-enumerate-interval 0 10))


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

$ ./sample81.scm
1
12346
24691
37036
49381
61726
6181
18526
30871
43216
55561
reset----------
10
12346
24691
37036
49381
61726
6181
18526
30871
43216
55561
$

0 コメント:

コメントを投稿