SICP, 1.12

(define (pascal-triangle row col)
  (cond ((< row col) -1)
    ((= col 1) 1)
    ((= col row) 1)
    (else (+ (pascal-triangle (- row 1) col)
         (pascal-triangle (- row 1) (- col 1))))))
;Value: pascal-triangle

(define (pt a b) (pascal-triangle a b))
;Value: pt

(pt 1 1)
;Value: 1

(pt 2 1)
;Value: 1

(pt 2 2)
;Value: 1

(pt 3 1)
;Value: 1

(pt 3 2)
;Value: 2

(pt 3 3)
;Value: 1

(pt 4 2)
;Value: 3

(pt 5 3)
;Value: 6

----

평이했다.
그런데 스킴에서 글자들 위치 정렬해서 출력하는 방법을 모르겠다.

by 나젤큐스 | 2008/07/22 19:50 | 트랙백 | 덧글(1)

SICP, 1.11

(define (tribo n)
  (if (< n 3)
      n
      (+ (tribo (- n 1))
     (* 2 (tribo (- n 2)))
     (* 3 (tribo (- n 3))))))
;Value: tribo

(tribo 20)
;Value: 10771211

(define (tribo2 n)
  (define (tribo-iter a b c count)
    (if (= count 0)
    a
    (tribo-iter b
            c
            (+ c (* 2 b) (* 3 a))
            (- count 1))))
  (tribo-iter 0 1 2 n))
;Value: tribo2

(tribo 1)
;Value: 1

(tribo 2)
;Value: 2

(tribo 0)
;Value: 0

(tribo 3)
;Value: 4

(tribo 4)
;Value: 11

(tribo2 0)
;Value: 0

(tribo2 1)
;Value: 1

(tribo2 2)
;Value: 2

(tribo2 3)
;Value: 4

(tribo 10)
;Value: 1892

(tribo2 10)
;Value: 1892

(tribo 30)
;Quit!

(tribo 20)
;Value: 10771211

(tribo2 20)
;Value: 10771211


----

생각보다 어려웠다. 역시 리커시브는 오묘해.

by 나젤큐스 | 2008/07/22 19:42 | 트랙백 | 덧글(0)

SICP, 1.9

(define inc (lambda (n) (+ n 1)))
;Value: inc

(define dec (lambda (n) (- n 1)))
;Value: dec

(define (plus a b)
  (if (= a 0)
      b
      (inc (plus (dec a) b))))
;Value: plus

----

(plus a b) 식을 계산하려면 인자 a 가 0이 될 때 까지 계속해서 리커전 해야한다.

----

(define (plus2 a b)
  (if (= a 0)
      b
      (plus (dec a) (inc b))))
;Value: plus2

----

그에 반해 (plus2 a b) 식을 계산하는 것은 tail recursion 으로 구현 가능하다.

by 나젤큐스 | 2008/07/18 19:36 | 트랙백 | 덧글(3)

the answer.

by 나젤큐스 | 2008/07/17 16:26 | 트랙백 | 덧글(1)

◀ 이전 페이지          다음 페이지 ▶