BLOG ARTICLE Announce | 33 ARTICLE FOUND

  1. 2011.01.01 2.1.2
  2. 2011.01.01 연습문제 2.1
  3. 2011.01.01 2.1.1
  4. 2011.01.01 Chapter.2 intro
  5. 2010.12.28 연습문제 1.38, 연습문제 1.39
  6. 2010.12.28 연습문제 1.46
  7. 2010.12.24 10일차. 연습문제 1.41 맞바꿈 계산법으로 풀어보기
  8. 2010.12.24 10일차 - 1.3.4 연습문제 1.42~45
  9. 2010.12.23 10일차 - 1.3.4
  10. 2010.12.21 9일차 - 연습문제 1.35

2.1.2

Announce/Chapter.2 2011. 1. 1. 11:07
...
AND

; ex_2_1

(define (make-rat3 n d)
  (let ((g ((if (< d 0) - +) (gcd n d))))
    (cons (/ n g) (/ d g))))
AND

2.1.1

Announce/Chapter.2 2011. 1. 1. 11:05
; 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))))
AND

...
AND


(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
>
AND

;; 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)
AND

(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

AND

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
AND

10일차 - 1.3.4

Announce/Chapter.1 2010. 12. 23. 19:07
(작성중)

AND

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
AND