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

22 February, 2008 (13:01) | Решения упражнений

Это весьма интересное упражнение, поскольку оно подводит нас очень близко к такой популярной сейчас в разработке программ парадигме, как объектно-ориентированное программирование. Действительно, передача сообщений – это фундамент, на котором построено ООП.

Собственно решение упражнения приведено ниже:

(define (make-from-mag-ang r a)
  (define (dispatch op)
    (cond ((eq? op 'real-part) (* r (cos a)))
          ((eq? op 'imag-part) (* r (sin a)))
          ((eq? op 'magnitude) r)
          ((eq? op 'angle) a)
          (else
           (error "Неизвестная оп. -- MAKE-FROM-MAG-ANG" op))))
  dispatch)

В результате вызова конструктора (тоже популярный в ООП термин) make-from-mag-ang мы получаем объект (термин из ООП; на самом деле мы получаем процедуру диспетчеризации, которая представляет собой объект). Затем при операциях над этим объектом можно сказать, что происходит вызов методов (которые задаются условиями внутри cond). Имени метода соответствует имя обобщенной операции, например ‘real-part).

Не правда ли, очень похоже на объектно-ориентированный подход? Думаю, в главе 3 нас ждет еще много интересного про ООП.

Write a comment