Skip to content

2.46

; A two-dimensional vector v running from the origin to a point can be represented 
; as a pair consisting of an x-coordinate and a y-coordinate. Implement a data 
; abstraction for vectors by giving a constructor make-vect and corresponding 
; selectors xcor-vect and ycor-vect. In terms of your selectors and constructor, 
; implement procedures add-vect, sub-vect, and scale-vect that perform the 
; operations vector addition, vector subtraction, and multiplying a vector by a 
; scalar:
; (x1,y1)+(x2,y2)=(x1 +x2,y1 +y2), 
; (x1,y1)−(x2,y2)=(x1 −x2,y1 −y2),
; 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))

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

; Testing
(add-vect (make-vect 1 3) (make-vect 2 8)) ;(3 . 11)
(sub-vect (make-vect 2 5) (make-vect 0 3)) ;(2 . 2)
(scale-vect 4 (make-vect 3 5)) ;(12 . 20)