方案:加速流

时间:2014-11-14 03:27:04

标签: scheme sicp

从我在网上找到的这个代码示例中,哪些函数是非加速流,单一加速流和超加速流?提前谢谢。

引用:lawfulsamurai.blogspot.com/2009/01/sicp-section-35-streams.html

(define (log2-summands n)  
  (cons-stream (/ 1.0 n)  
           (stream-map - (log2-summands (+ n 1))))) 

(define log2-stream   
 (partial-sums (log2-summands 1))) 

(define log2-stream-euler   
  (euler-transform log2-stream))  

(define log2-stream-accelerated  
  (accelerated-sequence euler-transform log2-stream))  

1 个答案:

答案 0 :(得分:3)

嗯,你没有告诉我们一个"单独加入"或者"超级加速" ,因此很难说它们在代码中的位置。这就像在玩Waldo"在哪里,但不知道什么是" Waldo"是

那就是说,我可以看到log2-summands,euler-transform,make-tableau和accele-sequence都是返回流,所以看起来它们似乎是候选者。现在,如果我们真正查看您链接到的博文SICP Section 3.5 Streams,我们会看到:

  
      
  1. 使用部分和的直接求和。 20后,log2的值在0.6687714031754279和0.7163904507944756之间振荡   迭代。

    (define log2-stream   
      (partial-sums (log2-summands 1)))  
    
  2.   
  3. 使用欧拉变换的Log2。 10次​​迭代后,值收敛到0.6932106782106783。

    (define log2-stream-euler   
      (euler-transform log2-stream))  
    
  4.   
  5. 加速求和。在4次迭代中,值收敛到0.6931488693329254。

    (define log2-stream-accelerated  
      (accelerated-sequence euler-transform log2-stream))
    
  6.   

听起来 log2-stream log2-stream-euler log2-stream-accelerated 分别是"未加速的流,单一加速流和超加速流"。