SICP 연습문제 2.46 친절한 풀이

문제

원점에서 한 점에 이르는 이차원 벡터 v는 x,y좌표의 쌍으로 나타낸다. 벡터를 짜맞추는 연산 make-vect와 벡터에서 좌표를 골라내는 연산 xcor-vect, ycor-vect를 정의하여, 요약된 벡터를 구현하라. 이 짜맞추개와 고르개를 써서 벡터의 덧셈, 뺄셈, 스칼라 곱셈 연산을 다음과 같이 처리하는 add-vect, sub-vect, scale-vect 프로시저를 구현하라.

(x1,y1)+(x2,y2)=(x1+x2,y1+y2)(x_1,y_1)+(x_2,y_2)=(x_1+x_2,y_1+y_2)

(x1,y1)(x2,y2)=(x1x2,y1y2)(x_1,y_1)-(x_2,y_2)=(x_1-x_2,y_1-y_2)

s(x,y)=(sx,sy)s ⋅ (x,y)=(sx,sy)

문제로 부터 얻은 것

기본적인 벡터연산과, 짜맞추개, 고르개의 정의를 안다면 특별히 얻을 것은 없는 것 같습니다.
다음 문제들을 풀기 위한 준비과정입니다.

문제풀이

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

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

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

(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 s v)
(make-vect (* s (xcor-vect v))
(* s (ycor-vect v))))