Решение упражнения 2.46 из SICP

4 February, 2008 (21:15) | Решения упражнений

Это упражнение не вызовет труда у тех, кто разобрался с концепциями барьеров абстракции, конструкторов и селекторов.

Для представления векторов я выбрал пары. Можно было бы избрать и альтернативную форму, например списки, что было бы более удобно при работе с многомерными векторами. Но в случае двумерного пространства пара видится простейшим способом представления.

Конструктор и селекторы для векторов выглядят следующим образом:

(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))))

Операции также можно было бы обобщить на случай многомерных векторов.

Comments

Comment from anonymous
Date: December 2, 2010, 3:28 pm

или:
(define make-vect cons)
(define xcor-vect car)
(define ycor-vect cdr)

Write a comment