2015年9月22日火曜日

開発環境

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

その他参考書籍

問題3.2.

コード(Emacs)

(begin
  (define print (lambda (x) (display x) (display "\n")))
  (define make-monitored
    (lambda (f)
      (let ((count 0))
        (define reset
          (lambda () (set! count 0)))
        (define counter
          (lambda (x)
            (set! count (+ count 1)) (f x)))
        (define (mf m)
          (cond ((eq? m 'how-many-calls?) count)
                ((eq? m 'reset-count) (reset))
                (else (counter m))))
        
        mf)))

  (define s (make-monitored sqrt))
  
  (print (s 100))
  (print (s 'how-many-calls?))
  (print (s 4))
  (print (s 'how-many-calls?))  
  (print "")
  
  (s 'reset-count)
  (print (s 'how-many-calls?))
  (print (s -1))
  (print (s 1+i))
  (print (s 'how-many-calls?)))

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

$ ./kscheme sample2.scm
10
1
2
2

0
0+i
1.09868+0.45509i
2
$

0 コメント:

コメントを投稿