Сложения, вычитания и умножения вектора на скаляр


Упражнения 2.46.

Двумерный вектор v, работающий от источника к точки могут быть представлены как пара состоящий из X-координаты и y-координата. Реализовать данные абстракция для векторов, предоставляя конструктор сделать-на vect и соответствующие селекторы xcor-на vect и ycor-на vect. С точки зрения ваших селекторов и конструктору, выполнять процедуры добавить-на vect, суб-на vect, а масштаб-на vect для выполнения этих операций, вектор кроме того, векторное вычитание, и умножение вектора на скаляр:

$$ (r_1, y_1) + (r_2, y_2) = (r_1 + r_2, y_1 + y_2) \\ (r_1, y_1) - (r_2, y_2) = (r_1 - r_2, y_1 - y_2) \\ с \cDOT на (р, г) = (СР, Си) $$

Я написал следующее:

(define (make-vect xcor ycor) (cons xcor ycor))
(define xcor-vect car)
(define ycor-vect cdr)

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

Его можно улучшить?



660
2
задан 15 апреля 2011 в 03:04 Источник Поделиться
Комментарии
1 ответ

Нет.

Если это будет рабочий код, вам будет лучше

  (define (sub-vect v1 v2) (add-vect v1 (scale-vect v2 -1)))

Однако, это не то, что упражнения на, как все должно быть написано "с точки зрения конструкторов и селекторов".

2
ответ дан 15 апреля 2011 в 04:04 Источник Поделиться