Add implementation of dense representation of polynomials (2.90)
This commit is contained in:
parent
27bb0bc3ee
commit
327bac9c7d
40
2_78.rkt
40
2_78.rkt
|
@ -681,7 +681,43 @@
|
|||
;; It isn't possible to coerce from one to the other, so a mixed-type operator is needed, and this
|
||||
;; approach would fail.
|
||||
|
||||
|
||||
|
||||
(define (highest-order-term term-list)
|
||||
(length term-list))
|
||||
|
||||
(define (make-term order coeff) (list order coeff))
|
||||
(define (order term) (car term))
|
||||
(define (coeff term) (cadr term))
|
||||
(define first-term car)
|
||||
(define (rest-terms term-list)
|
||||
(if (pair? term-list)
|
||||
(cdr term-list)
|
||||
the-empty-termlist))
|
||||
(define (make-termlist coeffs)
|
||||
(cond ((null? coeffs) '())
|
||||
((= 0 (car coeffs))
|
||||
(make-termlist (cdr coeffs)))
|
||||
(else (cons (car coeffs)
|
||||
(make-termlist (cdr coeffs))))))
|
||||
(define the-empty-termlist '())
|
||||
(define empty-termlist? null?)
|
||||
|
||||
(define (adjoin-term-dense term term-list)
|
||||
(let ((term-list-order (highest-order-term term-list)))
|
||||
(cond ((and (= (order term) 1)
|
||||
(= term-list-order 0))
|
||||
(make-termlist (list (coeff term))))
|
||||
((= (order term) term-list-order)
|
||||
(make-termlist
|
||||
(cons (add (coeff term)
|
||||
(first-term term-list))
|
||||
(rest-terms term-list))))
|
||||
((> (order term) term-list-order)
|
||||
(make-termlist
|
||||
(cons (coeff term)
|
||||
(adjoin-term-dense
|
||||
(make-term (- (order term) 1) 0)
|
||||
term-list))))
|
||||
(else (adjoin-term-dense term (rest-terms term-list))))))
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue