開発環境
計算機プログラムの構造と解釈[第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 コメント:
コメントを投稿