summaryrefslogtreecommitdiff
path: root/coding-exercises/2/83/install-rational.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises/2/83/install-rational.rkt')
-rw-r--r--coding-exercises/2/83/install-rational.rkt24
1 files changed, 23 insertions, 1 deletions
diff --git a/coding-exercises/2/83/install-rational.rkt b/coding-exercises/2/83/install-rational.rkt
index 92531ec..127871a 100644
--- a/coding-exercises/2/83/install-rational.rkt
+++ b/coding-exercises/2/83/install-rational.rkt
@@ -17,6 +17,8 @@
(define (mul a b)
(apply-fn 'mul a b))
(define (div a b)
+ (newline)
+ (display (list "Calling div from rat package" a b))
(apply-fn 'div a b))
(define (cos a)
(apply-fn 'cos a))
@@ -29,8 +31,28 @@
(define (atan a b)
(apply-fn 'atan a b))
+ (define (gcd a b)
+ (newline)
+ (newline)
+ (display (list "GCD RATIONAL -- " a b))
+ (let ((proc (get 'greatest-common-divisor (list (type-tag a) (type-tag b)))))
+ (if proc
+ (proc (contents a) (contents b))
+ (error "Not implemented -- " (list 'greatest-common-divisor (type-tag a) (type-tag b))))))
+
+
;; constructor and selectors
- (define (make-rat n d) (list n d))
+ (define (make-rat n d)
+ (let ((g (gcd n d)))
+ (let ((numer-div (get 'div (list (type-tag n) (type-tag g))))
+ (denom-div (get 'div (list (type-tag d) (type-tag g)))))
+ (if (and numer-div denom-div)
+ (list (numer-div (contents n) (contents g))
+ (denom-div (contents d) (contents g)))
+ (list n d)))))
+
+
+
(define (numer x) (car x))
(define (denom x) (cadr x))