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.rkt17
1 files changed, 14 insertions, 3 deletions
diff --git a/coding-exercises/2/83/install-rational.rkt b/coding-exercises/2/83/install-rational.rkt
index d1c94fc..334f802 100644
--- a/coding-exercises/2/83/install-rational.rkt
+++ b/coding-exercises/2/83/install-rational.rkt
@@ -69,8 +69,20 @@
(let ((g (gcd n d)))
(cons (sign (/ n g)) (abs (/ d g)))))
+ (define (dropme rat)
+ (display (list (numer rat) (denom rat)))
+ (display (list (integer? (numer rat)) (integer? (denom rat))))
+ (if (and (integer? (numer rat))
+ (integer? (denom rat)))
+ ((get 'make 'integer) (/ (numer rat) (denom rat)))
+ (list 'undefined)))
(define (raiseme rat)
- ((get 'make 'real) (/ (numer rat) (denom rat))))
+ (display (list (numer rat) (denom rat)))
+ (display (list (integer? (numer rat)) (integer? (denom rat))))
+ (if (and (integer? (numer rat))
+ (integer? (denom rat)))
+ ((get 'make 'real) (/ (numer rat) (denom rat)))
+ (list 'undefined)))
;; constructor
(put 'make 'rational
@@ -89,8 +101,7 @@
(put 'div '(rational rational)
(lambda (x y) (tagme (div-rat x y))))
(put 'raise '(rational) raiseme)
- (put 'project '(rational) (lambda (rat)
- ((get 'make 'integer) (/ (numer rat) (denom rat)))))
+ (put 'project '(rational) dropme)
;; sqrt and trig methods for complex nums
(put 'sqr '(rational) (lambda (r) (sqr (raiseme r))))
(put 'sqrt '(rational) (lambda (r) (sqrt (raiseme r))))