From ff68a95c6cac90d511290265b2e6c1dde1c0278a Mon Sep 17 00:00:00 2001 From: Mike Vink Date: Fri, 12 May 2023 09:15:59 +0200 Subject: finished chapter 2 finally --- coding-exercises/2/83/install-real.rkt | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'coding-exercises/2/83/install-real.rkt') diff --git a/coding-exercises/2/83/install-real.rkt b/coding-exercises/2/83/install-real.rkt index 2141059..2089437 100644 --- a/coding-exercises/2/83/install-real.rkt +++ b/coding-exercises/2/83/install-real.rkt @@ -19,12 +19,18 @@ ;; methods (define (gcd-real a b) - (if (and (integer? a) - (integer? b)) - (if (= b 0) - a - (gcd-real b (remainder a b))) - a)) + (cond ((and (integer? a) + (integer? b)) + (if (= b 0) + a + (gcd-real b (remainder a b)))) + ((= b 1) a) + (else (error "gcd for reals not implemented")))) + + (define (reduce-integers n d) + (let ((g (gcd-real n d))) + (list (/ n g) + (/ d g)))) (put 'add '(real real) (lambda (x y) (tagme (make (+ x y))))) (put 'neg '(real) (lambda (x) (tagme (make (- x))))) @@ -36,6 +42,7 @@ ((get 'make 'rational) n 1.0))) (put 'greatest-common-divisor '(real real) (lambda (a b) (tagme (gcd-real a b)))) ;; expt for integerizing factor + (put 'reduce '(real real) (lambda (n d) (reduce-integers n d))) (put 'expt '(real real) expt) ;; sqrt and trig methods for complex nums (put 'sqr '(real) sqr) -- cgit v1.2.3