summaryrefslogtreecommitdiff
path: root/coding-exercises/2/83/polynomials.rkt
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2023-05-09 22:17:11 +0200
committerMike Vink <mike1994vink@gmail.com>2023-05-09 22:17:11 +0200
commit591bda19951558d40d6ad11b49941c9ce8cd5704 (patch)
tree13545fcd0c23fc729126eac4fab6dd0418638e16 /coding-exercises/2/83/polynomials.rkt
parentd6752a78aa1dd2483a943acd2c3d8bb5fa6e8d2d (diff)
fixup
Diffstat (limited to 'coding-exercises/2/83/polynomials.rkt')
-rw-r--r--coding-exercises/2/83/polynomials.rkt43
1 files changed, 40 insertions, 3 deletions
diff --git a/coding-exercises/2/83/polynomials.rkt b/coding-exercises/2/83/polynomials.rkt
index d9d25cc..c400992 100644
--- a/coding-exercises/2/83/polynomials.rkt
+++ b/coding-exercises/2/83/polynomials.rkt
@@ -321,14 +321,22 @@
(error "Polys not in same var -- MUL-POLY" (list p1 p2))))
(define (div-terms L1 L2)
+ (newline)
+ (newline)
+ (display (list "DIV-TERMS -- " L1 L2))
+ (newline)
(if (empty-termlist? L1)
- (list (the-empty-termlist L1) (the-empty-termlist L1))
+ (list (the-empty-termlist L1)
+ (the-empty-termlist L1))
(let ((t1 (first-term L1))
(t2 (first-term L2)))
(if (> (order t2) (order t1))
(list (the-empty-termlist L1) L1)
(let ((new-c (div (coeff t1) (coeff t2)))
(new-o (sub (order t1) (order t2))))
+ (newline)
+ (display (list "NEW-TERM coeff --" new-c (type-tag (coeff t1))
+ (type-tag (coeff t2))))
(let ((rest-of-result (div-terms
(sub-terms L1
(mul-terms
@@ -341,15 +349,42 @@
(car rest-of-result))
(cadr rest-of-result))))))))
- (define (div-poly p1 p2)
+ (define (remainder-terms L1 L2)
+ (let ((result-remainder-list (div-terms L1 L2)))
+ (cadr result-remainder-list)))
+
+ (define (gcd-terms a b)
+ (newline)
+ (newline)
+ (display (list a b (empty-termlist? b)))
+ (if (empty-termlist? b)
+ a
+ (gcd-terms b (remainder-terms a b))))
+
+ (define (gcd-poly p1 p2)
+ (newline)
+ (newline)
+ (display (list p1 p2))
(if (same-variable? (variable p1)
(variable p2))
(cons
(variable p1)
- (div-terms (term-list p1)
+ (gcd-terms (term-list p1)
(term-list p2)))
(error "Polys not in same var -- DIV-POLY" (list p1 p2))))
+ (define (div-poly p1 p2)
+ (if (same-variable? (variable p1)
+ (variable p2))
+ (let ((result (div-terms (term-list p1)
+ (term-list p2))))
+ (if (empty-termlist? (cadr result))
+ (cons (variable p1)
+ (car result))
+ (cons (variable p1)
+ result)))
+ (error "Polys not in same var -- DIV-POLY" (list p1 p2))))
+
(define (polynomial-=zero? poly)
(define (rec term-list)
(cond ((empty-termlist? term-list) true)
@@ -366,4 +401,6 @@
(put 'div '(polynomial polynomial) (lambda (p1 p2) (tagme (div-poly p1 p2))))
(put 'make 'polynomial
(lambda (var terms) (tagme (make-poly var terms))))
+ (put 'greatest-common-divisor '(polynomial polynomial) (lambda (a b) (tagme (gcd-poly a b))))
+
'done)