; - Program 5.6, pg. 144 - (define zero-poly? (lambda (poly) (and (zero? (degree poly)) (zero? (leading-coef poly))))) ; - End Program - ; - Program 5.7, pg. 145 - (define make-term (lambda (deg coef) (poly-cons deg coef the-zero-poly))) ; - End Program - ; - Program 5.8, pg. 145 - (define leading-term (lambda (poly) (make-term (degree poly) (leading-coef poly)))) ; - End Program - ; - Program 5.9, pg. 146 - (define p+ (lambda (poly1 poly2) (cond ((zero-poly? poly1) poly2) ((zero-poly? poly2) poly1) (else (let ((n1 (degree poly1)) (n2 (degree poly2)) (a1 (leading-coef poly1)) (a2 (leading-coef poly2)) (rest1 (rest-of-poly poly1)) (rest2 (rest-of-poly poly2))) (cond ((> n1 n2) (poly-cons n1 a1 (p+ rest1 poly2))) ((< n1 n2) (poly-cons n2 a2 (p+ poly1 rest2))) (else (poly-cons n1 (+ a1 a2) (p+ rest1 rest2))))))))) ; - End Program - ; - Program 5.10, pg. 148 - (define p* (letrec ((t* (lambda (trm poly) (if (zero-poly? poly) the-zero-poly (poly-cons (+ (degree trm) (degree poly)) (* (leading-coef trm) (leading-coef poly)) (t* trm (rest-of-poly poly))))))) (lambda (poly1 poly2) (letrec ((p*-helper (lambda (p1) (if (zero-poly? p1) the-zero-poly (p+ (t* (leading-term p1) poly2) (p*-helper (rest-of-poly p1))))))) (p*-helper poly1))))) ; - End Program - ; - Program 5.11, pg. 148 - (define negative-poly (lambda (poly) (let ((poly-negative-one (make-term 0 -1))) (p* poly-negative-one poly)))) ; - End Program - ; - Program 5.12, pg. 148 - (define p- (lambda (poly1 poly2) (p+ poly1 (negative-poly poly2)))) ; - End Program - ; - Program 5.13, pg. 150 - (define poly-value (lambda (poly num) (letrec ((pvalue (lambda (p) (let ((n (degree p))) (if (zero? n) (leading-coef p) (let ((rest (rest-of-poly p))) (if (< (degree rest) (sub1 n)) (pvalue (poly-cons (sub1 n) (* num (leading-coef p)) rest)) (pvalue (poly-cons (sub1 n) (+ (* num (leading-coef p)) (leading-coef rest)) (rest-of-poly rest)))))))))) (pvalue poly)))) ; - End Program -