Add real and integer
This commit is contained in:
parent
e551568002
commit
052bcfc318
32
2_78.rkt
32
2_78.rkt
|
@ -147,26 +147,42 @@
|
|||
(define (install-integer-package)
|
||||
(define (tag x)
|
||||
(attach-tag 'integer x))
|
||||
(define value car)
|
||||
(define (make-int x) (list x))
|
||||
|
||||
(put 'add '(integer integer)
|
||||
(lambda (x y)
|
||||
(make-integer (+ x y))))
|
||||
(put 'equ? '(integer integer)
|
||||
(lambda (x y)
|
||||
(= x y)))
|
||||
(put 'raise '(integer)
|
||||
(lambda (x) (make-rational (value x) 1)))
|
||||
(lambda (x) (make-rational x 1)))
|
||||
(put 'project '(integer)
|
||||
(lambda (x) '()))
|
||||
(put 'make 'integer
|
||||
(lambda (x) (tag (make-int x)))))
|
||||
(lambda (x) (tag (round x))))
|
||||
'done)
|
||||
|
||||
;; Reals
|
||||
|
||||
(define (install-real-package)
|
||||
(define (tag x)
|
||||
(attach-tag 'real x))
|
||||
(define value car)
|
||||
(define (make-real x) (list x))
|
||||
|
||||
(put 'add '(real real)
|
||||
(lambda (x y)
|
||||
(make-real (+ x y))))
|
||||
(put 'equ? '(real real)
|
||||
(lambda (x y)
|
||||
(= x y)))
|
||||
(put 'raise '(real)
|
||||
(lambda (x) (make-complex-from-real-imag (value x) 0)))
|
||||
(lambda (x) (make-complex-from-real-imag x 0)))
|
||||
(put 'project '(real)
|
||||
(lambda (x) (make-rational
|
||||
(round (* x 1000))
|
||||
1000)))
|
||||
(put 'make 'real
|
||||
(lambda (x) (tag (make-real x)))))
|
||||
(lambda (x) (tag x)))
|
||||
'done)
|
||||
|
||||
;; Rationals
|
||||
|
||||
|
|
Loading…
Reference in New Issue