blob: 9b71922968cfc983bbbad1b75bf950b8377b3ea8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
#lang racket
(require "../../shared/data-directed-programming.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))
(define get (getter pkg))
(define print-tbl (printer pkg))
(define apply-generic (make-apply put get))
(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))))
|