2016年9月2日金曜日

開発環境

  • OS X El Capitan - Apple (OS)
  • Emacs(Text Editor)
  • Scheme (プログラミング言語)
  • kscheme (ksi)(github) (処理系)

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原著: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の第1章(手続きによる抽象の構築)、1.2(手続きとその生成するプロセス)、1.2.6(例: 素数性のテスト)、問題1.21.を取り組んでみる。

その他参考書籍

問題1.21.

コード(Emacs)

(begin
  (newline)
  (load "procedures.scm")

  (define nums '(1000 100000))
  (define count 0)
  
  (define (smallest-divisor n)
    (find-divisor n 2))
  (define (find-divisor n test-divisor)
    (if (> (square test-divisor) n)
        n
        (if (divides? test-divisor n)
            test-divisor
            (find-divisor n (+ test-divisor 1)))))
  (define (divides? a b)
    (= (remainder b a) 0))
  (define (prime? n)
    (= n (smallest-divisor n)))
  
  (define (timed-prime-test n)
    (newline)
    (display n)
    (start-prime-test n (current-second)))

  (define (start-prime-test n start-time)
    (if (prime? n)
        ((lambda ()
           (set! count (+ count 1))
           (report-prime (- (current-second) start-time))))))

  (define (report-prime elapsed-time)
    (display " *** ")
    (display elapsed-time))

  (define (iter n)
    (if (not (= count 3))
        ((lambda ()
           (timed-prime-test n)
           (iter (+ n 1))))))
    
  (for-each (lambda (n)
              (set! count 0)
              (iter n))
            nums)
  (newline)
  'done)

入出力結果(Terminal(kscheme), REPL(Read, Eval, Print, Loop))

$ ksi < sample22.scm
ksi> 

1000
1001
1002
1003
1004
1005
1006
1007
1008
1009 *** 0.1362299919128418
1010
1011
1012
1013 *** 0.1326611042022705
1014
1015
1016
1017
1018
1019 *** 0.1344850063323975
100000
100001
100002
100003 *** 1.349128007888794
100004
100005
100006
100007
100008
100009
100010
100011
100012
100013
100014
100015
100016
100017
100018
100019 *** 1.330251216888428
100020
100021
100022
100023
100024
100025
100026
100027
100028
100029
100030
100031
100032
100033
100034
100035
100036
100037
100038
100039
100040
100041
100042
100043 *** 1.389178991317749
=> done
ksi> $ ksi < sample22.scm
ksi> 

1000
1001
1002
1003
1004
1005
1006
1007
1008
1009 *** 0.1376609802246094
1010
1011
1012
1013 *** 0.1330740451812744
1014
1015
1016
1017
1018
1019 *** 0.1322948932647705
100000
100001
100002
100003 *** 1.37122106552124
100004
100005
100006
100007
100008
100009
100010
100011
100012
100013
100014
100015
100016
100017
100018
100019 *** 1.374717950820923
100020
100021
100022
100023
100024
100025
100026
100027
100028
100029
100030
100031
100032
100033
100034
100035
100036
100037
100038
100039
100040
100041
100042
100043 *** 1.363607883453369
=> done
ksi> $

0 コメント:

コメントを投稿