Решение упражнения 2.46 из SICP
Это упражнение не вызовет труда у тех, кто разобрался с концепциями барьеров абстракции, конструкторов и селекторов.
Для представления векторов я выбрал пары. Можно было бы избрать и альтернативную форму, например списки, что было бы более удобно при работе с многомерными векторами. Но в случае двумерного пространства пара видится простейшим способом представления.
Конструктор и селекторы для векторов выглядят следующим образом:
(define (make-vect x y) (cons x y)) (define (xcor-vect v) (car v)) (define (ycor-vect v) (cdr v))
Операции над векторами определяются так:
(define (add-vect u v)
(make-vect (+ (xcor-vect u) (xcor-vect v))
(+ (ycor-vect u) (ycor-vect v))))
(define (sub-vect u v)
(make-vect (- (xcor-vect u) (xcor-vect v))
(- (ycor-vect u) (ycor-vect v))))
(define (scale-vect s v)
(make-vect (* s (xcor-vect v))
(* s (ycor-vect v))))
Операции также можно было бы обобщить на случай многомерных векторов.
Write a comment