2008-11-17から1日間の記事一覧

SICP 1.24

(use srfi-19) (use srfi-27) (define (timed-prime-test n) (define (start-prime-test n start-time) (if (fast-prime? n 10000) (report-prime start-time))) (define (report-prime start-time) (display " *** ") (display (time-difference (current-t…

SICP 1.23

(use srfi-19) (define (timed-prime-test n) (define (start-prime-test n start-time) (if (prime? n) (report-prime start-time))) (define (report-prime start-time) (display " *** ") (display (time-difference (current-time) start-time))) (defin…

SICP 1.22

(use srfi-19) (define (timed-prime-test n) (define (start-prime-test n start-time) (if (prime? n) (report-prime start-time))) (define (report-prime start-time) (display " *** ") (display (time-difference (current-time) start-time))) (defin…

SICP 1.21

(define (smallest-divisor n) (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) (= (remainder b a) 0)) (d…

SICP 1.20

自信なし。 ; (define (gcd a b) ; (if (= b 0) ; a ; (gcd b (remainder a b)))) ;; normal-order (gcd 206 40) ;-> (if (= 40 0) 206 (gcd 40 (remainder 206 40))) ;-> (if (= 40 0) 206 (gcd 40 6) ; call remainder ;-> (if (= 40 0) 206 (if (= 6 0) 4…

SICP 1.19

ウーム、わからん。

SICP 1.18

(define (fast-mul x n) (define (mul-iter y n) (let ((halv (lambda (n) (/ n 2))) (double (lambda (n) (* n 2)))) (cond ((= n 1) #?=y) ((even? n) #?=(mul-iter (double y) (halv n))) (else #?=(+ x (mul-iter y (- n 1))))))) (mul-iter x n)) (fast…

SICP 1.17

(define (fast-mul x n) (let ((halv (lambda (n) (/ n 2))) (double (lambda (n) (* n 2)))) (cond ((= n 1) x) ((even? n) (double (fast-mul x (halv n)))) (else (+ x (fast-mul x (- n 1))))))) (fast-mul 3 4) 1.17と全く同じ解き方なんだけど、これは…

SICP 1.16

(define (my-expt b n) (define (expt-iter a n) (cond ((= n 1) #?=a) ((even? n) #?=(expt-iter (* a a) (/ n 2))) (else #?=(* a (expt-iter a (- n 1)))))) (expt-iter b n)) (print (my-expt 3 8)) 結果は正しいけど、解き方は間違っているっぽい。 els…

SICP練習問題 1.16 - 1.24

今日はSICPの問題をガシガシ解いた。処理系はGauche。 なんか答えが載っているサイトを見つけた。後日答え合わせをする。#?=はGaucheのマクロで、printfデバッグみたいに使っている。