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