|
SketchyLISP Reference |
Copyright (C) 2007 Nils M Holm |
| <<[digits] | [Index] | [equal?]>> |
Conformance: SketchyLISP Core
Purpose: Divide two numbers, giving a quotient and a remainder.
Arguments:
A - number (dividend)
B - number (divisor)
Implementation:
(define (divide a b)
(letrec
((sign
(lambda (x)
(cond ((eq? (negative? a) (negative? b)) x)
(else (list->integer
(cons '- (integer->list x)) #t)))))
(rsign
(lambda (x)
(cond ((negative? a)
(list->integer
(cons '- (integer->list x)) #t))
(else x))))
(idiv
(lambda (a b)
(cond ((zero? b) (bottom 'divide-by-zero))
; overflow?
((n< (abs a) (abs b))
(list 0 (rsign (abs a))))
; compute quotient, remainder
(else (let ((q (ndivide (abs a) (abs b))))
(list (sign (car q))
(rsign (cadr q)))))))))
(idiv (integer a) (integer b))))
Example:
(divide 11 -2) => (-5 1)
See also:
digits,
quotient,
remainder,
modulo,
+,
-,
*,
ndivide.
| <<[digits] | [Index] | [equal?]>> |