Skip to content

Commit a5d9a4e

Browse files
committed
Add implementation of exercise 3-54
1 parent 2464146 commit a5d9a4e

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

README.org

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
习题完成情况:
2626
- 章节一: 43/46
2727
- 章节二: 88/97
28-
- 章节三: 53/82
28+
- 章节三: 54/82
2929
- 章节四: TODO
3030
- 章节五: TODO
3131
* 运行

chapter3/exercise3-54.rkt

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#lang racket
2+
(require "stream.rkt")
3+
(require "exercise3-50.rkt")
4+
(require "infinite-stream.rkt")
5+
6+
(define (mul-stream s1 s2)
7+
(map-stream * s1 s2))
8+
9+
(define factorials (cons-stream 1 (mul-stream (stream-cdr integers) factorials)))
10+
11+
(module+ test
12+
(require rackunit)
13+
14+
(test-case "Test for mul-stream"
15+
(define s1 (list-to-stream '(2 3 4 5)))
16+
(define s2 (list-to-stream '(3 4 5 6)))
17+
(define s3 (mul-stream s1 s2))
18+
(check-equal? (stream-ref s3 2) 20)
19+
(check-equal? (stream-to-list s3 4) '(6 12 20 30))
20+
)
21+
(test-case "Test for factorials"
22+
(check-equal? (stream-to-list factorials 5) '(1 2 6 24 120))
23+
;; n = 0, n+1=1 的阶乘是1
24+
;; n = 1, n+1=2 的阶乘是2
25+
;; n = 2, n+1=3 的阶乘是6
26+
)
27+
)

chapter3/infinite-stream.rkt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,17 @@
1717
(not (divisible? x (stream-car stream))))
1818
(stream-cdr stream)))))
1919

20+
(define ones (cons-stream 1 ones))
21+
(define integers (cons-stream 1 (add-streams ones integers)))
22+
(define fibs (cons-stream 0
23+
(cons-stream 1
24+
(add-streams (stream-cdr fibs)
25+
fibs))))
2026
(define (add-streams s1 s2)
2127
(map-stream + s1 s2))
2228

29+
(provide add-streams ones integers fibs)
30+
2331
(module+ test
2432
(require rackunit)
2533

@@ -35,12 +43,6 @@
3543
)
3644

3745
(test-case "Test for infinite stream"
38-
(define ones (cons-stream 1 ones))
39-
(define integers (cons-stream 1 (add-streams ones integers)))
40-
(define fibs (cons-stream 0
41-
(cons-stream 1
42-
(add-streams (stream-cdr fibs)
43-
fibs))))
4446
(check-equal? (stream-ref fibs 6) 8)
4547
)
4648
)

0 commit comments

Comments
 (0)