Add real and integer

This commit is contained in:
Oliver Payne 2022-03-10 22:37:16 +00:00
parent e551568002
commit 052bcfc318
1 changed files with 24 additions and 8 deletions

View File

@ -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