diff options
| author | Mike Vink <> | 2023-04-19 12:44:58 +0200 |
|---|---|---|
| committer | Mike Vink <> | 2023-04-19 12:44:58 +0200 |
| commit | b214b07a67d48ad9205f63641891ff173ff53fca (patch) | |
| tree | e896b886c39beb1a0d6963828a687288dbd9a52b /coding-exercises/2/78 | |
| parent | 6d9a546f69023788d1b04fbd4722874466c3891d (diff) | |
working on complex package excercise
Diffstat (limited to 'coding-exercises/2/78')
| -rw-r--r-- | coding-exercises/2/78/complex-polar.rkt | 24 | ||||
| -rw-r--r-- | coding-exercises/2/78/complex-rectangular.rkt | 29 |
2 files changed, 53 insertions, 0 deletions
diff --git a/coding-exercises/2/78/complex-polar.rkt b/coding-exercises/2/78/complex-polar.rkt new file mode 100644 index 0000000..661627d --- /dev/null +++ b/coding-exercises/2/78/complex-polar.rkt @@ -0,0 +1,24 @@ +#lang racket +(provide install-polar-package) + +(define (install-polar-package) + (define (magnitude z) + (car z)) + (define (angle z) + (cdr z)) + (define (make-from-mag-ang r a) + (cons r a)) + (define (real-part z) + (* (magnitude z) (cos (angle z)))) + (define (imag-part z) + (* (magnitude z) (sin (angle z)))) + (define (make-from-real-imag x y) + (cons (sqrt (+ (sqr x) (sqr y))) + (atan y x))) + ;; register in data-driven package) + (define (typtag x) + (attach-tag 'polar x)) + (put 'real-part '(polar) real-part) + (put 'imag-part '(polar) imag-part) + (put 'magnitude '(polar) magnitude) + (put 'angle '(polar))) 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))))) |
