Added hacky fixnum division op.
authorTim Vaughan <tgvaughan@gmail.com>
Fri, 16 Dec 2016 11:07:56 +0000 (00:07 +1300)
committerTim Vaughan <tgvaughan@gmail.com>
Fri, 16 Dec 2016 11:07:56 +0000 (00:07 +1300)
Now we can get through at least the first few pages of SICP.

src/scheme-library.scm

index fc3c9b9..e8e9245 100644 (file)
 
 ; Binary operations
 
+(define (fix:/ x y) ; Non-standard definition while we don't have rationals
+  (if (fix:= 0 (fix:remainder x y))
+    (fix:quotient x y)
+    (flo:/ (fixnum->flonum x) (fixnum->flonum y))))
+
 (define (pair+ x y) (promote-dispatch (cons fix:+ flo:+) x y))
 (define (pair- x y) (promote-dispatch (cons fix:- flo:-) x y))
 (define (pair* x y) (promote-dispatch (cons fix:* flo:*) x y))
-(define (pair/ x y) (promote-dispatch
-                      (cons (lambda 'args
-                              (error "Division unsupported for integers."))
-                            flo:/) x y))
+(define (pair/ x y) (promote-dispatch (cons fix:/ flo:/) x y))
 
 (define (pair> x y) (promote-dispatch (cons fix:> flo:>) x y))
 (define (pair< x y) (promote-dispatch (cons fix:< flo:<) x y))