Упражнение 2.75.

Jun 13, 2011 14:52


Originally published at Записки сумасшедшего. Please leave any comments there.

Реализуйте в стиле передачи сообщений конструктор make-from-mag-ang. Он должен быть аналогичен приведенной выше процедуре make-from-real-imag.

------------

(define (make-from-real-imag x y) (define (dispatch op) (cond ((eq? op 'real-part) x) ((eq? op 'imag-part) y) ((eq? op 'magnitude) (sqrt (+ (sqr x) (sqr y)))) ((eq? op 'angle) (atan y x)) (else (error "Неизвестная оп. -- MAKE-FROM-REAL-IMAG" op)))) dispatch) (define (make-from-mag-ang x y) (define (dispatch op) (cond ((eq? op 'magnitude) x) ((eq? op 'angle) y) ((eq? op 'real-part) (* x (cos y))) ((eq? op 'imag-part) (* x (sin y))) (else (error "Неизвестная оп. -- MAKE-FROM-MAG-ANG" op)))) dispatch) (define real-imag-sample (make-from-real-imag 1 3)) (define mag-ang-sample (make-from-mag-ang (real-imag-sample 'magnitude) (real-imag-sample 'angle)))
Результаты:

> (mag-ang-sample 'magnitude) 3.1622776601683795 > (mag-ang-sample 'angle) 1.2490457723982544 > (mag-ang-sample 'real-part) 1.0 > (mag-ang-sample 'imag-part) 3.0
Исходник

sicp, scheme

Previous post Next post
Up