diff options
Diffstat (limited to 'coding-exercises/2/78/scheme-number.rkt')
| -rw-r--r-- | coding-exercises/2/78/scheme-number.rkt | 18 |
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) |
