summaryrefslogtreecommitdiff
path: root/coding-exercises/2/78.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises/2/78.rkt')
-rw-r--r--coding-exercises/2/78.rkt70
1 files changed, 66 insertions, 4 deletions
diff --git a/coding-exercises/2/78.rkt b/coding-exercises/2/78.rkt
index 637ea10..1043e66 100644
--- a/coding-exercises/2/78.rkt
+++ b/coding-exercises/2/78.rkt
@@ -1,7 +1,8 @@
#lang racket
(require "../../shared/data-directed-programming.rkt")
-(require "./78/complex-rectangular.rkt")
-(require "./78/complex-polar.rkt")
+(require "./78/scheme-number.rkt")
+(require "./78/install-rational-package.rkt")
+(require "./78/install-complex-package.rkt")
;; We are basically making a data directed framework for arithmethic operations in this module
(define pkg (make-dispatch-table))
(define put (putter pkg))
@@ -9,5 +10,66 @@
(define print-tbl (printer pkg))
(define apply-generic (make-apply put get))
-(install-rectangular-package put)
-(install-polar-package put)
+(install-scheme-number-package put)
+(install-rational-package put)
+(install-complex-package apply-generic get put)
+
+;; test running
+;; num
+(define (make-scheme-number n)
+ ((get 'make 'scheme-number) n))
+(define test-num (make-scheme-number 3))
+
+;; rational
+(define (make-rat n d)
+ ((get 'make 'rational) n d))
+(define test-rat (make-rat 1 2))
+
+;; complex
+(define (make-complex x y)
+ ((get 'make-from-real-imag 'complex) x y))
+(define test-complex (make-complex 1 2))
+
+((lambda ()
+ (println "add sub mul div")
+ (print (apply-generic 'add test-num test-num))
+ (print (apply-generic 'add test-rat test-rat))
+ (print (apply-generic 'add test-complex test-complex))
+ (newline)
+ (print (apply-generic 'sub test-num test-num))
+ (print (apply-generic 'sub test-rat test-rat))
+ (print (apply-generic 'sub test-complex test-complex))
+ (newline)
+ (print (apply-generic 'div test-num test-num))
+ (print (apply-generic 'div test-rat test-rat))
+ (print (apply-generic 'div test-complex test-complex))
+ (newline)
+ (print (apply-generic 'mul test-num test-num))
+ (print (apply-generic 'mul test-rat test-rat))
+ (print (apply-generic 'mul test-complex test-complex))))
+
+;; 78
+((lambda ()
+ (newline)
+ ;; Should be represented just as a scheme number
+ (display test-num)))
+
+;; 79
+(define (equ? a b)
+ (apply-generic 'equ? a b))
+((lambda ()
+ (newline)
+ (display "testing equ?")
+ (newline)
+ (println (equ? test-num test-num))
+ (println (equ? test-rat test-rat))
+ (println (equ? test-complex test-complex))))
+
+;; 80
+(define (=zero? n)
+ (apply-generic '=zero? n))
+((lambda ()
+ (newline)
+ (println (=zero? test-num))
+ (println (=zero? test-rat))
+ (println (=zero? test-complex))))