diff options
Diffstat (limited to 'coding-exercises/2/78/complex-rectangular.rkt')
| -rw-r--r-- | coding-exercises/2/78/complex-rectangular.rkt | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/coding-exercises/2/78/complex-rectangular.rkt b/coding-exercises/2/78/complex-rectangular.rkt new file mode 100644 index 0000000..41e93b6 --- /dev/null +++ b/coding-exercises/2/78/complex-rectangular.rkt @@ -0,0 +1,29 @@ +#lang racket +(provide install-rectangular-package) +(require "../../../shared/data-directed-programming.rkt") + + +(define (install-rectangular-package put) + (define (real-part z) (car z)) + (define (imag-part z) (cdr z)) + (define (make-from-real-imag x y) (cons x y)) + (define (magnitude z) (sqrt (+ (sqr (real-part z)) + (sqr (real-part z))))) + (define (angle z) + (atan (imag-part z) + (real-part z))) + (define (make-from-mag-ang r a) + (cons (* r (cos a)) + (* r (sin a)))) + ;; interface part + (define (typtag x) + (attach-tag 'rectangular x)) + + (put 'real-part '(rectangular) real-part) + (put 'imag-part '(rectangular) imag-part) + (put 'magnitude '(rectangular) magnitude) + (put 'angle '(rectangular) angle) + (put 'make-from-real-imag 'rectangular + (lambda (x y) (typtag (make-from-real-imag x y)))) + (put 'make-from-mag-ang 'rectangular + (lambda (r a) (typtag (make-from-mag-ang r a))))) |
