SICP自習

SICP Lite #9に行かなかったので自習。
DrSchemeにてある範囲の素数を求めて、結果(個数)と実行時間を表示する。divides?とprime?はあるとして

(define (search-for-primes start end)
  (define (next n)
    (+ n (if (divides? 2 n) 1 2)))
  (define (loop start end result)
    (if (> start end)
        result
        (loop (next start) end (+ result (if (prime? start) 1 0)))))
  (loop start end 0))

(define (timed-search start end)
  (define (print-result result time)
    (print (string-append "prime count: " (number->string result)))
    (newline)
    (print (string-append "exec time: " (number->string time))))
  (define (loop start end start-tick)
    (print-result (search-for-primes start end) (- (current-process-milliseconds) start-tick)))
  (loop start end (current-process-milliseconds)))

ちょうどリーマン予想NHKスペシャルを見たところで、級数からπを求めるとかいうタイムリーなトピックがあって楽しい。(習ったのかもしれないが完全に忘れてる)