Here's an answer that modifies the given code a bit to be easier to work with, and makes use of the mul-term-by-all-terms procedure. Also a corrected div-poly procedure, since the one in the first post is analogous to add-poly, when it shouldn't be since div-terms returns a list as should div-poly.

All the solutions above missed the point that the results of div-poly are two polynomials. What they returns are a quotient poly and a remainder term list. When we return the result, we should make two polynomials, not one. The correct implementation for div-poly should be:

(define(div-poly p1 p2)(if(same-variable? (variable p1)(variable p2))(let((result (div-terms (term-list p1)(term-list p2))))(list(make-poly (variable p1)(car result))(make-poly (variable p1)(cadr result))))(error "Variable is not the same -- DIV-POLY"(list(variable p1)(variable p2)))))

Siki

The answer above has one inaccurate point: add-terms & mul-terms should be used instead of add-poly & mul-poly in the first paragraph.

`(define (div-terms L1 L2) (if (empty-termlist? L1) (list (the-empty-termlist) (the-empty-termlist)) (let ((t1 (first-term L1)) (t2 (first-term L2))) (if (> (order t2) (order t1)) (list (the-empty-termlist) L1) (let ((new-c (div (coeff t1) (coeff t2))) (new-o (- (order t1) (order t2)))) (let ((rest-of-result (div-terms (sub-terms L1 (mul-terms L2 (list (make-term new-o new-c)))) L2))) (list (adjoin-term (make-term new-o new-c) (car rest-of-result)) (cadr rest-of-result))))))))`

Gera

Here's an answer that modifies the given code a bit to be easier to work with, and makes use of the mul-term-by-all-terms procedure. Also a corrected div-poly procedure, since the one in the first post is analogous to add-poly, when it shouldn't be since div-terms returns a list as should div-poly.

Shawn

All the solutions above missed the point that the results of div-poly are two polynomials. What they returns are a quotient poly and a remainder term list. When we return the result, we should make two polynomials, not one. The correct implementation for div-poly should be:

`(define (div-poly p1 p2) (if (same-variable? (variable p1) (variable p2)) (let ((result (div-terms (term-list p1) (term-list p2)))) (list (make-poly (variable p1) (car result)) (make-poly (variable p1) (cadr result)))) (error "Variable is not the same -- DIV-POLY" (list (variable p1) (variable p2)))))`