Skip to content

Commit 2464146

Browse files
committed
Add implementation of exercise 3-53
1 parent 1d00e4b commit 2464146

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
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-
- 章节三: 52/82
28+
- 章节三: 53/82
2929
- 章节四: TODO
3030
- 章节五: TODO
3131
* 运行

chapter3/exercise3-50.rkt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
(apply stream-map
1010
(cons proc (map stream-cdr argstreams))))))
1111

12+
(provide (rename-out [stream-map map-stream]))
13+
1214
(module+ test
1315
(require rackunit)
1416

chapter3/exercise3-53.org

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#+LATEX_CLASS: ramsay-org-article
2+
#+LATEX_CLASS_OPTIONS: [oneside,A4paper,12pt]
3+
#+AUTHOR: Ramsay Leung
4+
5+
#+DATE: 2025-07-27 Sun 22:22
6+
7+
#+begin_src scheme
8+
(define s (cons-stream 1 (add-stream s s)))
9+
#+end_src
10+
11+
这样定义出来的 =s= 是一个流,其首元素是1,第二个元素就是 =s= 的第一个元素加上 =s= 的第一个元素,即2,第三个元素即 =s= 的第二个元素加 =s= 的第二个元素,即 =4=,以此类推:
12+
1 2 4 8 16 32 64 ...
13+
14+
可以算是一个无穷的二进制序列

chapter3/infinite-stream.rkt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#lang racket
22
(require "stream.rkt")
3+
(require "exercise3-50.rkt")
34

45
(define (integers-starting-from n)
56
(cons-stream n (integers-starting-from (+ n 1))))
@@ -16,6 +17,9 @@
1617
(not (divisible? x (stream-car stream))))
1718
(stream-cdr stream)))))
1819

20+
(define (add-streams s1 s2)
21+
(map-stream + s1 s2))
22+
1923
(module+ test
2024
(require rackunit)
2125

@@ -29,4 +33,14 @@
2933
(define primes (sieve (integers-starting-from 2)))
3034
(check-equal? (stream-ref primes 50) 233)
3135
)
36+
37+
(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))))
44+
(check-equal? (stream-ref fibs 6) 8)
45+
)
3246
)

0 commit comments

Comments
 (0)