]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ex2_91.rkt
Solution to 4.33. This had been difficult to get right, though conceptually it was
[sicp.git] / src / sicp / ex2_91.rkt
1 #lang racket
2
3 (define (div-terms L1 L2)
4   (if (empty-termlist? L1)
5       (list (the-empty-termlist) (the-empty-termlist))
6       (let ((t1 (first-term L1))
7             (t2 (first-term L2)))
8         (if (> (order t2) (order t1))
9             (list (the-empty-termlist) L1)
10             (let ((new-c (div (coeff t1) (coeff t2)))
11                   (new-o (- (order t1) (order t2))))
12               (let ((rest-of-result
13                      (div-terms (sub-terms L1
14                                            (mul-term-by-all-terms (make-term new-o new-c)
15                                                                   L2))
16                                 L2)))
17                 (list (adjoin-term (make-term new-o new-c) 
18                                    (car rest-of-result))
19                       (cadr rest-of-result))))))))
20
21 (define (div-poly P1 P2)
22   (if (same-variable? (variable P1)
23                       (variable P2))
24       (let ((t1 (term-list P1))
25             (t2 (term-list P2)))
26         (let ((div-results (div-terms t1 t2)))
27           (list (make-poly (variable P1) (car div-results))
28                 (make-poly (variable P1) (cadr div-results)))))
29       (error "Polynomials are not of the same variable -- DIV-POLY")))