Skip to content

Commit 3206afc

Browse files
committed
增加练习2-88.
1 parent 9081a32 commit 3206afc

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

chapter2/exercise2-87.rkt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#lang racket
2+
(require "generic_operation.scm")
23
(require "poly.rkt")
34
;;; 练习2-87
45
(define (=zero-poly? poly)
@@ -9,3 +10,5 @@
910
(all-coeff-zero? (rest-terms term-list)))))
1011
(all-coeff-zero? (term-list poly)))
1112

13+
(put '=zero? '(polynomial) (lambda (p) (=zero-poly? p)))
14+

chapter2/exercise2-88.rkt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
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+
)

chapter2/poly.rkt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,4 @@
102102
(mul (coeff t1) (coeff t2)))
103103
(mul-term-by-all-terms t1 (rest-terms L))))))
104104

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)

0 commit comments

Comments
 (0)