Skip to content

Commit 2efbaac

Browse files
committed
Add implementation of exercise 3-73
1 parent e4d1dce commit 2efbaac

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

README.org

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
习题完成情况:
2626
- 章节一: 43/46
2727
- 章节二: 88/97
28-
- 章节三: 66/82
28+
- 章节三: 67/82
2929
- 章节四: TODO
3030
- 章节五: TODO
3131
* 运行
@@ -158,4 +158,4 @@
158158

159159
https://sarabander.github.io/sicp/html/3_002e5.xhtml#g_t3_002e5
160160

161-
i和j不可以被2,3,5整除,翻译成了可以被2,3或者5整除,意义完全相反,真的是服了。
161+
i和j不可以被2,3,5整除,翻译成了可以被2,3或者5整除,意思完全相反,真的是服了。

chapter3/exercise3-73.rkt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#lang racket
2+
(require "stream.rkt")
3+
(require "infinite-stream.rkt")
4+
5+
(define (RC resistor capacitor time-step)
6+
(lambda (input-stream initial-voltage)
7+
(add-streams (integral (scale-stream input-stream (/ 1 capacitor)) initial-voltage time-step)
8+
(scale-stream input-stream resistor))))
9+
(define RC1 (RC 5 1 0.5))
10+
11+
(module+ test
12+
(require rackunit)
13+
14+
(test-case "Test for resistor-capacitor(RC)"
15+
(define v-result (RC1 ones 0))
16+
(check-equal? (stream-take-n v-result 5) '(5 5.5 6.0 6.5 7.0))
17+
)
18+
)

chapter3/infinite-stream.rkt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,14 @@
4545
(stream-cdr t))
4646
(pairs (stream-cdr s) (stream-cdr t))))))
4747

48-
(provide add-streams scale-stream ones integers fibs interleave pairs)
48+
(define (integral integrand initial-value dt)
49+
(define int
50+
(cons-stream initial-value
51+
(add-streams (scale-stream integrand dt)
52+
int)))
53+
int)
54+
55+
(provide add-streams scale-stream ones integers fibs interleave pairs integral)
4956

5057
(module+ test
5158
(require rackunit)
@@ -76,4 +83,9 @@
7683
(define int-pairs (stream-take-n (pairs s1 s2) 4))
7784
(check-equal? int-pairs '((1 1) (1 2) (2 2) (1 3)))
7885
)
86+
87+
(test-case "Test for integral"
88+
(define result (integral ones 0 0.5))
89+
(check-equal? (stream-take-n result 5) '(0 0.5 1.0 1.5 2.0))
90+
)
7991
)

0 commit comments

Comments
 (0)