2016/01/01

SICP 問題 4.24

driver-loopに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))
(define (fib n)
  (define (iter a b count)
    (if (= n count)
        a
        (iter b (+ a b) (+ count 1))))
  (iter 1 1 1))

これを使って計算する.
最初のeval

;;; M-Eval input:
(fib 100000)
;(time (eval input the-global-environment))
; real   1.846
; user   2.010
; sys    0.010

解析と評価を分けたeval

;;; M-Eval input:
(fib 100000)
;(time (eval input the-global-environment))
; real   1.095
; user   1.140
; sys    0.010

最初のevalのほうが評価のたびに構文解析をする分遅くなっている.


© 2022 wat-aro