Hatena::Groupsicp

SICP読書記

 | 

2009-12-14

stream.scm

 stream.scm - SICP読書記 を含むブックマーク はてなブックマーク -  stream.scm - SICP読書記

なんだかgaucheのstreamの実装がSICPの期待と違うっぽい。

以下のstream.scmを使ってやってみたら結果が違った

http://d.hatena.ne.jp/rucifer_hacker/20090127/1233037207

問題3.51

> gosh p192-3.51.scm

0(stream-ref x 5)

1

2

3

4

5(stream-ref x 7)

6

7

問題3.52

(load "./stream.scm")

(define sum 0)
(define (accum x)
  (set! sum (+ x sum))
  sum)

(define seq (stream-map accum (stream-enumerate-interval 1 20)))

(define y (stream-filter even? seq))

(define z (stream-filter (lambda (x) (= (remainder x 5) 0))
  seq))

(display-line "stream-ref y 7")
(stream-ref y 7)

(display-line "display-stream z")
(display-stream z)

これで実行

> gosh p192-3.52.scm

stream-ref y 7

display-stream z

10

15

45

55

105

120

190

210

sumの合計がどこでどうなるって言うのが一つ。

想像するに、(stream-ref y 7)では8回seqが評価されるから、1+2+...+8で40。

displayを入れて実験

> gosh p192-3.52.scm

stream-ref y 7

sum=136

display-stream z

10

15

45

55

105

120

190

210

....。あ、そうか。8つめの偶数が出てくるまで評価されるんだ。

7つめの偶数は2,4,6,8,10,12,14,16で16。1~16の合計は136。

TrishaTrisha2011/04/10 18:192YOG4g Great thinking! That really breaks the mold!

idmooddwagbidmooddwagb2011/04/12 04:42kPLDem <a href="http://jnxznjbewwui.com/">jnxznjbewwui</a>

eizyabbreizyabbr2011/04/13 07:056iMrjp , [url=http://wvvbuylirhkh.com/]wvvbuylirhkh[/url], [link=http://aebieveibhev.com/]aebieveibhev[/link], http://mtrjxksgirct.com/

 |