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のほうが評価のたびに構文解析をする分遅くなっている.