File tree Expand file tree Collapse file tree 3 files changed +42
-1
lines changed Expand file tree Collapse file tree 3 files changed +42
-1
lines changed Original file line number Diff line number Diff line change 1
1
#lang racket
2
+ (require "generic_operation.scm " )
2
3
(require "poly.rkt " )
3
4
;;; 练习2-87
4
5
(define (=zero-poly? poly)
9
10
(all-coeff-zero? (rest-terms term-list)))))
10
11
(all-coeff-zero? (term-list poly)))
11
12
13
+ (put '=zero? '(polynomial) (lambda (p) (=zero-poly? p)))
14
+
Original file line number Diff line number Diff line change
1
+ #lang racket
2
+ (require "generic_operation.scm " )
3
+ (require "poly.rkt " )
4
+ ;;; 先定义一个求负操作 neg
5
+ ;;; 加法的表示:a + b.
6
+ ;;; 减法的表示: a - b. 或者时a + (neg b). 所以只需要定义一个求负操作,就可以复用
7
+ ;;; 已有的加法过程
8
+
9
+ (define (install-scheme-number-neg)
10
+ (define (tag x)
11
+ (attach-tag 'scheme-number x))
12
+
13
+ (put 'neg '(scheme-number) (lambda (a) (tag (- a))))
14
+ )
15
+
16
+ (define (neg x) (apply-generic 'neg x))
17
+
18
+ (define (install-polynomial-neg)
19
+ (define (tag x)
20
+ (attach-tag 'polynomial x))
21
+
22
+ (define (neg-term terms)
23
+ (if (empty-termlist? terms)
24
+ terms
25
+ (let ((first (first-term terms)))
26
+ (adjoin-term (make-term (order first) (neg (coeff first)))
27
+ (neg-term (rest-terms terms))))))
28
+ (define (neg-poly p)
29
+ (make-poly (variable p)
30
+ (neg-term (term-list p))))
31
+
32
+ (put 'neg '(polynomial) (lambda (x) (tag (neg-poly p))))
33
+
34
+ (define (sub-poly p1 p2)
35
+ (add-poly p1 (neg-poly p2)))
36
+
37
+ (put 'sub '(polynomial polynomial) (lambda (x) (tag (sub-poly p1 p2))))
38
+ )
Original file line number Diff line number Diff line change 102
102
(mul (coeff t1) (coeff t2)))
103
103
(mul-term-by-all-terms t1 (rest-terms L))))))
104
104
105
- (provide empty-termlist? =zero? first-term rest-terms coeff term-list)
105
+ (provide empty-termlist? =zero? first-term rest-terms coeff term-list adjoin-term variable make-term )
You can’t perform that action at this time.
0 commit comments