diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2023-05-03 09:19:18 +0200 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2023-05-03 09:19:18 +0200 |
| commit | 3fdd0f8042574874a34999291e00cb550cf91e2d (patch) | |
| tree | 5e32ebdd2a1cd34203d5b04921ddd5ee66b47b48 /coding-exercises/2/83/install-integer.rkt | |
| parent | 07286656104cfdab4004eae4d02fbe1f6c2ace21 (diff) | |
refactor to use arithmetic package for working with polys
Diffstat (limited to 'coding-exercises/2/83/install-integer.rkt')
| -rw-r--r-- | coding-exercises/2/83/install-integer.rkt | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/coding-exercises/2/83/install-integer.rkt b/coding-exercises/2/83/install-integer.rkt new file mode 100644 index 0000000..2fabf3a --- /dev/null +++ b/coding-exercises/2/83/install-integer.rkt @@ -0,0 +1,33 @@ +#lang racket +(provide install-integer) +(require "../../../shared/data-directed-programming.rkt") + +(define (install-integer put get) + ;; local methods + (define (tagme datum) + (attach-tag 'integer datum)) + (define (make i) + (inexact->exact (round i))) + (define (raiseme i) + (if (equal? (type-tag i) 'integer) + ((get 'make 'rational) i 1) + (error "cannot raise non integer in integer package"))) + ;; constructor + (put 'make 'integer (lambda (x) (tagme (make x)))) + ;; methods + (put 'add '(integer integer) (lambda (x y) (tagme (make (+ x y))))) + (put 'sub '(integer integer) (lambda (x y) (tagme (make (- x y))))) + (put 'mul '(integer integer) (lambda (x y) (tagme (make (* x y))))) + (put 'div '(integer integer) (lambda (x y) (tagme (make (/ x y))))) + (put 'raise '(integer) raiseme) + ;; sqrt and trig methods for complex nums + (put 'sqr '(integer) sqr) + (put 'sqrt '(integer) sqrt) + (put 'atan '(integer) atan) + (put 'cos '(integer) cos) + (put 'sin '(integer) sin) + ;; predicates + (put 'equ? '(integer integer) (lambda (x y) (= x y))) + (put '=zero? '(integer) (lambda (x) (= 0 x))) + 'done) + |
