summaryrefslogtreecommitdiff
path: root/coding-exercises/2/78/scheme-number.rkt
blob: fa9c0ec487a4d59fdb4d1fdbae0cd2f1bc2e5320 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)