SICP Exercise 1.16
b^2 = b * b
b^4 = b^2 * b^2
b^8 = b^4 * b^4
로 부터 아래와 같은 규칙을 얻는다.
b^n = (b^(n/2))^2 if n is even
b^n = b * b^(n-1) if n is odd
이 것을 Big Theta (log n) growth를 갖는 procedure로 …
more ...SICP Exercise 1.12
파스칼의 삼각형 문제이다. 문제 자체는 뭘 계산하라는 건지 좀 모호한데, 그냥 주어진 위치의 값을 결과로 내는 procedure를 만들었다. 위치는 (행, 열) 형식이다.
다른 사람들도 이런 식으로 생각한 것같다.
SICP Exercise 1.12
;; Pascal's triangle
;;
;; notation: (row, column)
;;
;; 1 (1, 1)
;; 1 1 (2, 1) (2, 2)
;; 1 2 1 …
SICP Exercise 1.11
f(n) = n if n > 3
f(n) = f(n-1) + 2f(n-2) + 3f(n-3) if n >= 3
f(n)을 recursive process와 iterative process로 작성하는 문제이다.
내가 기억하기로는 (책에서), 조엘 스폴스키는 C와 같은 언어를 이용해서 recursive function을 만드는 사람을 채용하지 않는다고 했는데, stack overflow가 발생할 수 있기 때문이다. 일정한 space만 …
more ...SICP Exercise 1.8
세 제곱근을 구하는 문제다.
exercise 1.7의 improve
procedure만 바꿔주면 된다.
SICP Exercise 1.8
(define (cuberoot-iter guess prev-guess x)
(if (good-enough? guess prev-guess)
guess
(cuberoot-iter (improve guess x) guess x)))
(define (improve guess x)
(/ (+ (/ x (square guess))
(* 2 guess))
3))
(define (square x)
(* x x))
(define (cube x)
(* x …
SICP Exercise 1.7
원래 책에 소개된 코드는 square를 취한 결과를 x와 비교해서 적당한 값이라고 생각되면 값을 반환하게 되어있다. 1.7 문제는 이 코드를 개선하라는 것인데, 너무 작은 값이나 큰 값에 대해서 정확하게 동작하지 않기 때문이다.
floating-point 타입의 정밀도 한계때문에 아주 작은 값에 대해서 정확한 값을 얻지 못하고, 아주 큰 값에 대해서는 비효율적이거나 값을 …
more ...SICP Exercise 1.6
SICP (Structure and Interpretation of Computer Programs)를 공부하는 사람이 꽤 많은 듯 하다. 관련 블로그도 많고, 다 볼 수 있을지 모르겠지만, How To Design Programs 살 때 덤으로 산건데 이걸 먼저 보고 있다..
아무튼 Exercise 1.6 은 cond
를 이용해 if
를 대체하는 procedure를 만들어
사용하면 어떻게 되느냐 …
SICP Exercise 1.3
cond 여러 개를 쭉 늘어 놓았다가, 결국 다음 코드처럼 간결하게..
(define (square x)
(* x x))
(define (sum-square-2big a b c)
(cond ((>= a b) (+ (square a) (square (max b c))))
(else (+ (square b) (square (max a c))))
))
;; test
(if (= 0 (sum-square-2big 0 0 0)) #t #f)
(if (= 2 (sum-square-2big -1 -1 …