流计算模式的使用

;系统地将迭代操作方式表示为流过程
(define (sqrt-stream x)
  (define guesses
    (cons-stream 1.0
                 (stream-map
                  (lambda (guess) (/ (+ guess (/ x guess)) 2))
                  guesses)))
  guesses)
(for-each (lambda (x)
            (newline)
            (display x))
          (show-n (sqrt-stream 2) 10))
;
(define (pi-summands n)
  (cons-stream (/ 1.0 n)
               (stream-map - (pi-summands (+ n 2)))))
(define pi-stream
  (scale-stream (partial-sums (pi-summands 1)) 4))
(define (display-n stream n)
  (for-each (lambda (x)
              (newline)
              (display x))
            (show-n stream n)))
(display-n pi-stream 9)
(define (euler-transform s)
  (let ((s0 (stream-ref s 0))
        (s1 (stream-ref s 1))
        (s2 (stream-ref s 2)))
    (cons-stream (- s2 (/ (square (- s2 s1)) (+ s0 s2 (- (* 2 s1)))))
                 (euler-transform (stream-cdr s)))))
(display-n (euler-transform pi-stream) 10)
(define (make-tableau transform s)
  (cons-stream s
               (make-tableau transform
                             (transform s))))
(define (accelerated-sequence transform s)
  (stream-map stream-car
              (make-tableau transform s)))
(display-n (accelerated-sequence euler-transform pi-stream) 8)
;3.64
(define (stream-limit s tolerance)
  (if (< (abs (- (stream-car s) (stream-car (stream-cdr s))))
         tolerance)
      (stream-car (stream-cdr s))
      (stream-limit (stream-cdr s) tolerance)))
(define (my-sqrt x tolerance)
  (stream-limit (sqrt-stream x) tolerance))
;3.65
(define (ln2-summands n)
  (cons-stream (/ 1.0 n) (scale-stream (ln2-summands (+ n 1)) -1)))
(define ln2-stream
  (partial-sums (ln2-summands 1)))
(display-n ln2-stream 10)
(display-n (accelerated-sequence euler-transform ln2-stream) 10)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值