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?]>> |