2014年10月1日水曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の4(超言語的抽象)、4.2(Scheme の変形 - 遅延評価)、4.2.2(遅延評価の解釈系)、評価器の修正、サンクの表現、問題 4.29.を解いてみる。

その他参考書籍

問題 4.29.

コード(BBEdit, Emacs)

sample29.scm

(define (fib n)
  (cond ((= n 0) 0)
        ((= n 1) 1)
        (else (+ (fib (- n 2) )
                 (fib (- n 1))))))

(fib 20)

(exit)

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

$ time ./lazy_evaluator_without_memo.scm < sample29.scm


;;; L-Eval input:

;;; L-Eval value:
ok

;;; L-Eval input:

;;; L-Eval value:
6765

;;; L-Eval input:

real 0m12.110s
user 0m12.078s
sys 0m0.024s
$ time ./lazy_evaluator.scm < sample29.scm


;;; L-Eval input:

;;; L-Eval value:
ok

;;; L-Eval input:

;;; L-Eval value:
6765

;;; L-Eval input:

real 0m2.384s
user 0m2.360s
sys 0m0.017s
$

メモ化した時の応答。

  1. 100
  2. 1

メモ化しない時の応答。

  1. 100
  2. 2

確認。

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

$ ./lazy_evaluator.scm


;;; L-Eval input:
(define count 0)

;;; L-Eval value:
ok

;;; L-Eval input:
(define (id x)
  (set! count (+ count 1))
  x)

;;; L-Eval value:
ok

;;; L-Eval input:
(define (square x)
  (* x x))

;;; L-Eval value:
ok

;;; L-Eval input:
(square (id 10))

;;; L-Eval value:
100

;;; L-Eval input:
count

;;; L-Eval value:
1

;;; L-Eval input:
(exit)
$ ./lazy_evaluator_without_memo.scm


;;; L-Eval input:
(define count 0)

;;; L-Eval value:
ok

;;; L-Eval input:
(define (id x)
  (set! count (+ count 1))
  x)

;;; L-Eval value:
ok

;;; L-Eval input:
(define (square x)
  (* x x))

;;; L-Eval value:
ok

;;; L-Eval input:
(square (id 10))

;;; L-Eval value:
100

;;; L-Eval input:
count

;;; L-Eval value:
2

;;; L-Eval input:
(exit)
$

0 コメント:

コメントを投稿