問題4.24 – SICP(計算機プログラムの構造と解釈)その197

問題4.24

手続き driver-loopeval 部分を time で計測する。

(define (driver-loop)
  (prompt-for-input input-prompt)
  (let ((input (read)))
       (let ((output (time (eval input the-global-environment))))
            (announce-output output-prompt)
            (user-print output)))
  (driver-loop))

以下の手続きで Fibonacci 数の計算にかかる時間を、初めの超循環評価器と4.1.7節の構文解析を実行から分離した版とで比較する。

(define (fib n)
  (define (fib-iter a b count)
    (if (= count 0)
        b
        (fib-iter (+ a b) a (- count 1))))
  (fib-iter 1 0 n))

初めの超循環評価器の場合

;;; M-Eval input:
(fib 100000)
;(time (eval input the-global-environment))
; real   5.994
; user   5.870
; sys    0.090

4.1.7節の構文解析を実行から分離した版

;;; M-Eval input:
(fib 100000)
;(time (eval input the-global-environment))
; real   5.121
; user   4.980
; sys    0.080

構文解析が余分に行われる初めの超循環評価器の方が処理に時間がかかっている。

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»