にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

続・Scheme演習第2回-問1

前回は、

とりあえず、3つめの時間の比較は次回以降にして、今回はfib1とfib2のみ作った。

「Scheme」の検索結果 - にたまごほうれん草

という状況なので、時間を計測してみた。
まず、

  • 時間計測にはtimeという関数を使う
  • for文みたいなのはないので、繰り返しするには再帰を使わないといけない

で、たぶん単なる私の勉強不足なのだろうが、任意の関数を指定回数実行する関数を作れなかったので、以下のようにfib1,fib2をそれぞれ指定回数実行する関数を定義した。

(define (fib1-loop n loop)
  (fib1 n)
  (if (> loop 0) (fib1-loop n (- loop 1))))
(define (fib2-loop n loop)
  (fib2 n)
  (if (> loop 0) (fib2-loop n (- loop 1))))

時間に差が出るように100万回ずつ実行。

(time (fib1-loop 10 1000000))
(time (fib2-loop 10 1000000))

結果

結構大きな差が出ましたね。

gosh> ;(time (fib1-loop 10 1000000))
; real  14.420
; user  14.420
; sys    0.000
#<undef>
gosh> ;(time (fib2-loop 10 1000000))
; real   0.855
; user   0.850
; sys    0.000
#<undef>