【发布时间】:2015-08-25 01:18:47
【问题描述】:
我已经完成了练习 3.59, 3.60, 3.61 并且卡在了 3.62,所以我转向 sicp-solutions@scheme wiki community 寻求帮助。
练习 3.59 和 3.60 可以使用 sine 和 cosine 案例轻松测试,但不是 3.61 或 3.62。
社区提供的3.62代码在sine和cosine系列正确的情况下产生全零tangent系列:
> (display-stream-until sine-series 7)
0
1
0
-1/6
0
1/120
0
> (display-stream-until cosine-series 7)
1
0
-1/2
0
1/24
0
-1/720
> (display-stream-until tangent-series 7)
0
0
0
0
0
0
0
一开始我认为我之前练习中写的代码可能是错误的,所以我在社区中检查了我的 3.59/3.60/3.61 的解决方案,结果发现我们产生了相同的结果。
我尝试将3.59/3.60/3.61 的代码复制到我的IDE(DrRacket) 中,但tangent 系列仍然打印为零。
代码如下:
(define (mul-series s1 s2)
(cons-stream (* (stream-car s1)
(stream-car s2))
(add-streams (mul-streams (stream-cdr s1)
(stream-cdr s2))
(mul-series s1 s2))))
(define (reciprocal-series s)
(cons-stream 1
(scale-stream (mul-series (stream-cdr s)
(reciprocal-series s))
-1)))
(define (div-series s1 s2)
(let ((c (stream-car s2)))
(if (= c 0)
(error "constant term of s2 can't be 0!")
(scale-stream
(mul-series s1
(reciprocal-series (scale-stream s2
(/ 1 c))))
(/ 1 c)))))
(define tangent-series
(div-series sine-series
cosine-series))
及其需要的部分:(太长无法用正文突出显示)
(require (only-in "myLib.rkt"
cons-stream
stream-car
stream-cdr
add-streams
mul-streams
scale-stream
stream-map
ones
integers
sine-series
cosine-series
stream-ref
display-stream-until))
谁能告诉我我的代码有什么问题或者可能的错误隐藏在哪里?
顺便问一下,你们如何在 SICP 上验证您的代码?
我发现几个博客/github 存储库提供的代码没有(足够)测试用例。
我很难用纯代码处理这些数学问题。
【问题讨论】: