From b214b07a67d48ad9205f63641891ff173ff53fca Mon Sep 17 00:00:00 2001 From: Mike Vink <> Date: Wed, 19 Apr 2023 12:44:58 +0200 Subject: working on complex package excercise --- coding-exercises/2/78/complex-rectangular.rkt | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 coding-exercises/2/78/complex-rectangular.rkt (limited to 'coding-exercises/2/78/complex-rectangular.rkt') 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))))) -- cgit v1.2.3