summaryrefslogtreecommitdiff
path: root/coding-exercises/2/78/scheme-number.rkt
diff options
context:
space:
mode:
Diffstat (limited to 'coding-exercises/2/78/scheme-number.rkt')
-rw-r--r--coding-exercises/2/78/scheme-number.rkt18
1 files changed, 18 insertions, 0 deletions
diff --git a/coding-exercises/2/78/scheme-number.rkt b/coding-exercises/2/78/scheme-number.rkt
new file mode 100644
index 0000000..fa9c0ec
--- /dev/null
+++ b/coding-exercises/2/78/scheme-number.rkt
@@ -0,0 +1,18 @@
+#lang racket
+(provide install-scheme-number-package)
+(require "../../../shared/data-directed-programming.rkt")
+
+
+(define (install-scheme-number-package put)
+ ;; interface part
+ (define (typtag x)
+ (attach-tag 'scheme-number x))
+
+ (put 'add '(scheme-number scheme-number) (lambda (x y) (typtag (+ x y))))
+ (put 'sub '(scheme-number scheme-number) (lambda (x y) (typtag (- x y))))
+ (put 'mul '(scheme-number scheme-number) (lambda (x y) (typtag (* x y))))
+ (put 'div '(scheme-number scheme-number) (lambda (x y) (typtag (/ x y))))
+ (put 'equ? '(scheme-number scheme-number) (lambda (x y) (= x y)))
+ (put '=zero? '(scheme-number) (lambda (x) (= 0 x)))
+ (put 'make 'scheme-number (lambda (x) (typtag x)))
+ 'done)