## Solution to SICP Exercise 1.43

Solution to Exercise 1.43:

```(define (compose f g) (lambda (x) (f (g x)))) (define (inc i) (+ i 1))```

``` ```

```(define (repeated f n) (define (iter i result) (if (= i n) result (iter (inc i) (compose f result)))) (iter 1 f)) ```

## Solution to SICP Exercise 1.41

Solution to Exercise 1.41:

```(define (double f) (lambda (x) (f (f x)))) ```

Output:

```> (define (inc x) (+ x 1)) > (((double (double double)) inc) 5) 21 ```

## Solution to SICP Exercise 1.39

Solution to Exercise 1.39:

```(define (cont-frac n d k) (define (iter i sub-expr) (if (= i 0) sub-expr (iter (- i 1) (/ (n i) (+ (d i) sub-expr))))) (iter (- k 1) (/ (n k) (d k))))```

``` ```

```(define (tan-cf x k) (let ((x-squared-negated (- (* x x)))) (cont-frac (lambda (i) (if (= i 1) x x-squared-negated)) (lambda (i) (- (* 2 i) 1)) k))) ```

## Solution to SICP Exercise 1.38

Solution to Exercise 1.38:

```(define (cont-frac n d k) (define (iter i sub-expr) (if (= i 0) sub-expr (iter (- i 1) (/ (n i) (+ (d i) sub-expr))))) (iter (- k 1) (/ (n k) (d k))))```

``` ```

```(define (e k) (+ (cont-frac (lambda (i) 1.0) (lambda (i) (if (= (remainder (+ i 1) 3) 0) (* 2 (/ (+ i 1) 3)) 1.0)) k) 2)) ```

## Solution to SICP Exercise 1.37

Solution to Exercise 1.37:

```; part a (recursive process) (define (cont-frac n d k) (define (sub-expr i) (if (= i k) (/ (n i) (d i)) (/ (n i) (+ (d i) (sub-expr (+ i 1)))))) (sub-expr 1))```

``` (define (golden-ratio k) (cont-frac (lambda (i) 1.0) (lambda (i) 1.0) k)) (define (iterations-required) (define (iter i previous) (let ((current (golden-ratio i))) (if (= (round (* current 10000)) (round (* previous 10000))) (- i 1) (iter (+ i 1) current)))) (iter 1 0.0)) ; > (iterations-required) ; 12 ```

```; part b (iterative process) (define (cont-frac-i n d k) (define (iter i sub-expr) (if (= i 0) sub-expr (iter (- i 1) (/ (n i) (+ (d i) sub-expr))))) (iter (- k 1) (/ (n k) (d k)))) ```

## Solution to SICP Exercise 1.36

Solution to Exercise 1.36:

```(define tolerance 0.00001) (define (fixed-point f first-guess) (define (close-enough? v1 v2) (< (abs (- v1 v2)) tolerance)) (define (try guess) (display guess) (newline) (let ((next (f guess))) (if (close-enough? guess next) next (try next)))) (try first-guess))```

``` (define (average a b) (/ (+ a b) 2)) (define result-with-damping (fixed-point (lambda (x) (average x (/ (log 1000) (log x)))) 2.0)) (display "result-with-damping: ") (display result-with-damping) (newline) (newline) (define result-without-damping (fixed-point (lambda (x) (/ (log 1000) (log x))) 2.0)) ```

```(display "result-without-damping: ") (display result-without-damping) ```

Output:

```2.0 5.9828921423310435 4.922168721308343 4.628224318195455 4.568346513136242 4.5577305909237005 4.555909809045131 4.555599411610624 4.5555465521473675 result-with-damping: 4.555537551999825```

``` ```

```2.0 9.965784284662087 3.004472209841214 6.279195757507157 3.759850702401539 5.215843784925895 4.182207192401397 4.8277650983445906 4.387593384662677 4.671250085763899 4.481403616895052 4.6053657460929 4.5230849678718865 4.577114682047341 4.541382480151454 4.564903245230833 4.549372679303342 4.559606491913287 4.552853875788271 4.557305529748263 4.554369064436181 4.556305311532999 4.555028263573554 4.555870396702851 4.555315001192079 4.5556812635433275 4.555439715736846 4.555599009998291 4.555493957531389 4.555563237292884 4.555517548417651 4.555547679306398 4.555527808516254 4.555540912917957 result-without-damping: 4.555532270803653 ```