...
BLOG ARTICLE Announce | 33 ARTICLE FOUND
- 2011.01.01 2.1.2
- 2011.01.01 연습문제 2.1
- 2011.01.01 2.1.1
- 2011.01.01 Chapter.2 intro
- 2010.12.28 연습문제 1.38, 연습문제 1.39
- 2010.12.28 연습문제 1.46
- 2010.12.24 10일차. 연습문제 1.41 맞바꿈 계산법으로 풀어보기
- 2010.12.24 10일차 - 1.3.4 연습문제 1.42~45
- 2010.12.23 10일차 - 1.3.4
- 2010.12.21 9일차 - 연습문제 1.35
; ex_2_1 (define (make-rat3 n d) (let ((g ((if (< d 0) - +) (gcd n d)))) (cons (/ n g) (/ d g))))
; 2.1.1 ; operation (define (add-rat x y) (make-rat (+ (* (numer x) (denom y)) (* (numer y) (denom x))) (* (denom x) (denom y)))) (define (sub-rat x y) (make-rat (- (* (numer x) (denom y)) (* (numer y) (denom x))) (* (denom x) (denom y)))) (define (mul-rat x y) (make-rat (* (numer x) (numer y)) (* (denom x) (denom y)))) (define (div-rat x y) (make-rat (* (numer x) (denom y)) (* (numer y) (denom x)))) (define (equal-rat? x y) (= (* (numer x) (denom y)) (* (numer y) (denom x)))) ; constructor, selector (define (make-rat n d) (cons n d)) (define (numer x) (car x)) (define (denom x) (cdr x)) (define (print-rat x) (newline) (display (numer x)) (display "/") (display (denom x))) (define (make-rat2 n d) (let ((g (gcd n d))) (cons (/ n g) (/ d g))))
(define (cont-frac n d k) (define (cont-frac-helper i) (if (> i k) 0 (/ (n i) (+ (d i) (cont-frac-helper (+ i 1)))))) (cont-frac-helper 1)) (define (ln-cf k) (define (n k) 1.0) (define (d k) (if (= (remainder (+ k 1) 3) 0) (* (/ (+ k 1) 3) 2) 1)) (cont-frac n d k)) (ln-cf 10) (define (tan-cf x k) (define (n k) (if ( = k 1) x (* x x))) (define (d k) (- (* 2 k) 1)) (cont-frac n d k)) (tan-cf 0 10)
환영합니다. DrRacket, 버전 5.0.2 [3m].
언어: R5RS [사용자정의]; memory limit: 256 MB.
0.7182817182817183
0
>
언어: R5RS [사용자정의]; memory limit: 256 MB.
0.7182817182817183
0
>
;; exercises 1.46 (define (iterative-improve f enough? first-guess) (define (iter guess) (if (enough? guess) guess (iter (f guess)))) (iter first-guess)) (define (sqrt-iter-imp x) (iterative-improve (lambda (guess) (average guess (/ x guess))) (lambda (guess) (< (abs (- (square guess) x)) 0.001)) 1.0)) (define (fixed-point-iter-imp f first-guess) (iterative-improve f (lambda (guess) (< (abs (- guess (f guess))) 0.001)) first-guess))
이건 내꺼
;; ex 1.46 - iterative-improve (define (iterative-improve good? improve) (lambda (guess) (define (iter v) (if (good? v) v (iter (improve v)))) (iter guess))) ;; sqrt (define (sqrt-ii x) (define (good? guess) (< (abs (- (square guess) x)) 0.001)) (define (improve guess) (/ (+ guess (/ x guess)) 2)) ((iterative-improve good? improve) 1.0)) (sqrt-ii 9) ;; fixed-point (define (fixed-point-ii f g) (define (good? guess) (< (abs (- guess (f guess)) 0.00001))) ((iterative-improve good? f) g)) (fixed-point cos 1.0)
(define (inc x) (+ x 1)) (define (double f) (lambda (x) (f (f x)))) ;; 맞바꿈 계산법으로 확인하기 (((double (double double)) inc) 5) (((double (lambda (x) (double (double x)))) inc) 5) (((lambda (y) ((lambda (x) (double (double x))) ((lambda (z) (double (double z))) y))) inc) 5) (((lambda (x) (double (double x))) ((lambda (z) (double (double z))) inc)) 5) (((lambda (x) (double (double x))) (double (double inc))) 5) ((double (double (double (double inc)))) 5) ((double (double (double (lambda (x) (inc (inc x)))))) 5) ((double (double (lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))))) 5) ((double (lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b)))) 5) ((lambda (c) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) c))) 5) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) 5)) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) 5))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) 5)))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (x) (inc (inc x))) (inc (inc 5))))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) (inc (inc (inc (inc 5)))))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) (inc (inc (inc (inc 5))))))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) ((lambda (x) (inc (inc x))) (inc (inc (inc (inc (inc (inc 5)))))))) ((lambda (b) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) b))) (inc (inc (inc (inc (inc (inc (inc (inc 5))))))))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) (inc (inc (inc (inc (inc (inc (inc (inc 5)))))))))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) (inc (inc (inc (inc (inc (inc (inc (inc 5))))))))))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) ((lambda (x) (inc (inc x))) (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc 5)))))))))))) ((lambda (a) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) a))) (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc 5))))))))))))) ((lambda (x) (inc (inc x))) ((lambda (x) (inc (inc x))) (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc 5)))))))))))))) (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc (inc 5))))))))))))))))
결론: double에 double을 적용하면 제곱으로 늘어남. (((double (double (double double))) inc) 0) ;; => 256
ex 1.42
(define (compose f g) (lambda (x) (f (g x)))) ((compose square inc) 6) ;; => 49
ex 1.43
(define (repeated f i) (define (iter g n) (if (= n 1) g (iter (compose g f) (- n 1)))) (iter f i)) ((repeated inc 10) 0) ;; => 10 ((repeated square 2) 5) ;; => (square (square 5)) => 625
ex 1.44
(define (smooth f) (lambda (x) (/ (+ (f (- x dx)) (f x) (f (+ x dx))) 3))) (define (smooth-n f n) ((repeated smooth n) f))
ex 1.45
(define (cube-root x) (fixed-point (average-damp (lambda (y) (/ x (square y)))) 1.0)) ;; (cube-root 27) (define (4th-root x) (fixed-point (average-damp (lambda (y) (/ x (* y y y)))) 1.0)) ;; (4th-root 16) => infinite loop ;; y -> x/y^(n-1) 은 몇번 average-damp 해야 하는지 실험하기 (define (nth-root x n) (fixed-point ((repeated average-damp n) (lambda (y) (/ x (expt y (- n 1))))) 1.0)) ;; 실험 결과.. 패턴이 안보인다 ;; n = 4 > 2 ;; n = 5 > 2 ;; n = 13 > 3 ;; n = 22 > 2
1.35
(define golden-ratio (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0)) golden-ratio ;; 1.6180327868852458 ;; 1.36 (define tolerance 0.00001) (define (fixed-point f first-guess) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) (define (try guess) (let ((next (f guess))) (display guess) (newline) (if (close-enough? guess next) next (try next)))) (try first-guess)) (fixed-point (lambda (x) (/ (log 1000) (log x))) 4) ;; 4 ;; 4.9828921423310435 ;; 4.301189432497896 ;; 4.734933901055578 ;; 4.442378437719527 ;; 4.632377941509957 ;; 4.505830646780214 ;; 4.588735606875765 ;; 4.533824356566502 ;; 4.569933524181419 ;; 4.546075272637248 ;; 4.561789745175653 ;; 4.551417836654131 ;; 4.558254212070262 ;; 4.553744140202578 ;; 4.556717747893265 ;; 4.554756404545319 ;; 4.5560497413912975 ;; 4.5551967522618035 ;; 4.555759257615811 ;; 4.555388284933278 ;; 4.555632929754932 ;; 4.555471588998784 ;; 4.555577989320218 ;; 4.555507819903776 ;; 4.555554095154945 ;; 4.555523577416557 ;; 4.555543703263474 ;; 4.555530430629037 ;; 4.555539183677709 (fixed-point (lambda (x) (average x (/ (log 1000) (log x)))) 4) ;; 4 ;; 4.491446071165521 ;; 4.5449746509755515 ;; 4.553746974742814 ;; 4.555231425802502 ;; 4.555483906560562 ;; 4.5555268862194875 ;; 4.5555342036887705 ;; 1.37