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
Исходник