summaryrefslogtreecommitdiff
path: root/coding-exercises/2/83/install-real.rkt
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2023-05-09 22:17:11 +0200
committerMike Vink <mike1994vink@gmail.com>2023-05-09 22:17:11 +0200
commit591bda19951558d40d6ad11b49941c9ce8cd5704 (patch)
tree13545fcd0c23fc729126eac4fab6dd0418638e16 /coding-exercises/2/83/install-real.rkt
parentd6752a78aa1dd2483a943acd2c3d8bb5fa6e8d2d (diff)
fixup
Diffstat (limited to 'coding-exercises/2/83/install-real.rkt')
-rw-r--r--coding-exercises/2/83/install-real.rkt10
1 files changed, 10 insertions, 0 deletions
diff --git a/coding-exercises/2/83/install-real.rkt b/coding-exercises/2/83/install-real.rkt
index d82d48a..a232e5e 100644
--- a/coding-exercises/2/83/install-real.rkt
+++ b/coding-exercises/2/83/install-real.rkt
@@ -17,6 +17,15 @@
;; constructor
(put 'make 'real (lambda (x) (tagme (make x))))
;; methods
+
+ (define (gcd-real a b)
+ (if (and (integer? a)
+ (integer? b))
+ (if (= b 0)
+ a
+ (gcd-real b (remainder a b)))
+ a))
+
(put 'add '(real real) (lambda (x y) (tagme (make (+ x y)))))
(put 'neg '(real) (lambda (x) (tagme (make (- x)))))
(put 'sub '(real real) (lambda (x y) (tagme (make (- x y)))))
@@ -25,6 +34,7 @@
(put 'raise '(real) raiseme)
(put 'project '(real) (lambda (n)
((get 'make 'rational) n 1.0)))
+ (put 'greatest-common-divisor '(real real) (lambda (a b) (tagme (gcd-real a b))))
;; sqrt and trig methods for complex nums
(put 'sqr '(real) sqr)
(put 'sqrt '(real) sqrt)