2008. 7. 29.

연습문제 2.48

(define (make-segment vect1 vect2)
  (cons vect1 vect2))

(define (start-segment seg)
  (car seg))

(define (end-segment seg)
  (cdr seg))

연습문제 2.47

(define (make-frame origin edge1 edge2)
  (list origin edge1 edge2))


인 경우

(define (origin frame)
  (car frame))

(define (edge1 frame)
  (car (cdr frame)))

(define (edge2 frame)
  (car (cdr (cdr frame))))


이며

(define (make-frame origin edge1 edge2)
  (cons origin (cons edge1 edge2)))


인 경우

(define (origin frame)
  (car frame))

(define (edge1 frame)
  (car (cdr frame)))

(define (edge2 frame)
  (car (cdr (cdr frame))))


2008. 7. 23.

연습문제 2.46

(define (make-vect x y)
  (cons x y))

(define (xcor-vect vect)
  (car vect))

(define (ycor-vect vect)
  (cdr vect))

(define (add-vect v1 v2)
  (make-vect (+ (xcor-vect v1) (xcor-vect v2))
             (+ (ycor-vect v1) (ycor-vect v2))))

(define (sub-vect v1 v2)
  (make-vect (- (xcor-vect v1) (xcor-vect v2))
             (- (ycor-vect v1) (ycor-vect v2))))

(define (scale-vect v n)
  (make-vect (* (xcor-vect v) n)
             (* (ycor-vect v) n)))

연습문제 2.45

(define (split pos1 pos2)
  (lambda (painter n)
    (if (= n 0)
        painter
        (let ((smaller ((split pos1 pos2 ) painter (- n 1))))
          (pos1 painter (pos2 smaller smaller))))))

연습문제 2.44

(define (up-split painter n)
  (if (= n 0)
      painter
      (let ((smaller (up-split painter (- n 1))))
        (below painter (beside smaller smaller)))))
 

연습문제 2.43

속도가 그렇게 느려지지는 않음...
워낙에 요즘 컴퓨터가 좋아서 그럴지도...

연습문제 2.42

기본적인 퀸의 위치는 row와 col으로 결정된다고 하자.

이를 pos라고 하고 이를 생성하는 함수를 구성한다.

(define (make-pos row col)
  (cons row col))

(define (position-row pos)
  (car pos))

(define (position-col pos)
  (cdr pos))

(define (position-equal? pos1 pos)
  (equal? pos1 pos2))

이제 empty-board, adjoin-position 을 정의한다.

(define (empty-board) '())

(define (adjoin-position row col positions)
  (append positions (make-pos row col)))

다음으로 safe?를 만든다. k번째 퀸이 나머지 다른 퀸에서 안전하려면 이전에 위치가 안전하다는 가정하에서 시작한다.
따라서 safe? k 는 safe? k-1 번째 놓여진 position에 비해 안전하면 된다. 즉 row, col 값이 모두 다르고 대각선상에 있지않아야한다.

... 이하는 다음에 계속