summaryrefslogtreecommitdiff
path: root/coding-exercises/2/78/complex-rectangular.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises/2/78/complex-rectangular.rkt')
-rw-r--r--coding-exercises/2/78/complex-rectangular.rkt29
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)))))