(wat-aro)

生きてます

2015-10-07から1日間の記事一覧

SICP 問題1.30

sumを末尾再帰で書き直す (define (sum term a next b) (define (iter a result) (if (> a b) result (iter (next a) (+ (term a) result)))) (iter a 0))

SICP 問題1.29

(define (integral-simpson f a b n) (define h (/ (- b a) n)) (define (y k) (f (+ a (* k h)))) (define (next i) (+ i 1)) (define (term i) (* (cond ((or (= i 0) (= i n)) 1) ((even? i) 2) (else 4)) (y i))) (* (/ h 3.0) (sum term a next n))) go…

SICP 問題1.28

(define (miller-rabin-test n) (define (expmod base exp m) (cond ((= exp 0) 1) ((even? exp) (let* ((tmp (expmod base (/ exp 2) m)) (tmp2 (remainder (square tmp) m))) (if (and (< 1 tmp (- n 1)) ;; 1でも(n-1)でもなく,かつ (= 1 tmp2)) ;; nを…

SICP 問題1.27

(define (carmichael-test n) (define (try-loop a) (cond ((= a n) true) ((= (expmod a n n) a) (try-loop (+ a 1))) (else false))) (try-loop 1)) gosh> (carmichael-test 561) #t gosh> (prime? 561) #f gosh> (carmichael-test 1105) #t gosh> (prime?…

SICP 問題1.26

(define (expmod base exp m) (cond ((= exp 0) 1) ((even? exp) (remainder (* (expmod base (/ exp 2) m) (expmod base (/ exp 2) m)) m)) (else (remainder (* base (expmod base (- exp 1) m)) m)))) square を使わないことで * の部分で (expomd base (…

SICP 問題1.25

(define (expmod b e m) (cond ((= e 0) 1) ((even? e) (remainder (square (expmod b (/ e 2) m)) m)) (else (remainder (* b (expmod b (- e 1) m)) m)))) (define (new-expmod base exp m) (remainder (fast-expt base exp) m)) time手続きを使って比較し…

SICP 問題1.23

(define (next n) (if (= n 2) 3 (+ 2 n))) (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? test-divisor n) test-divisor) (else (find-divisor n (next test-divisor))))) gosh> (search-for-primes 1000 1100)…

SICP 問題1.22

(define (timed-prime-test n) (newline) (display n) (start-prime-test n (runtime))) (define (start-prime-test n start-time) (if (prime? n) (report-prime (- (runtime) start-time)))) (define (report-prime elapsed-time) (display " *** ") (disp…

SICP 問題1.21

(define (smallest-divisor n) (find-divisor n 2)) (define (find-divisor n test-divisor) (cond ((> (square test-divisor) n) n) ((divides? test-divisor n) test-divisor) (else (find-divisor n (+ test-divisor 1))))) (define (divides? a b) (= (r…