yaottiの日記

2008-11-12

Ex 4.70

23:41

4.70に関連して調べてみた@gauche

(use util.stream)
(define ones1 (stream-cons 1 a))
(define ones2 (stream-cons 1 a))
(stream-ref ones1 10)
;; gosh> 1


(define (append-zero-to-ones1)
  (let ((ones ones1))
    (set! ones1
	  (stream-cons 0 ones))
    'ok))

(define (append-zero-to-ones2)
  (set! ones2
	(stream-cons 0 ones2))
  'ok)

(append-zero-to-ones1)
(stream->list (stream-take ones1 10))
;; gosh> (0 1 1 1 1 1 1 1 1 1)

(append-zero-to-ones2)
(stream->list (stream-take ones2 10))
;; gosh> (0 0 0 0 0 0 0 0 0 0)

ones2ではset!が再帰的に評価される.(再帰的といってもstreamなので遅延されるけど)

よって全て0になる.

そこでstreamをletによって別の局所変数に退避させ,それを利用して代入を行えばここで意図した通りになる.


こんな基礎が実験しないと分からないとは.ううむ.


後少しで4章が終わる.もう一頑張り.

GitHub - yaotti/sicp-codes: my answers of sicp exercises.

CarlaCarla2012/12/24 13:58Great article but it didn't have everything-I didn't find the kitcehn sink!

lmgeeeywlmgeeeyw2012/12/26 17:527dtF42 , [url=http://zwlmmuaeuxpr.com/]zwlmmuaeuxpr[/url], [link=http://dyyqqsyicxuk.com/]dyyqqsyicxuk[/link], http://qdxboywsbrbo.com/

rgdrvxlrgdrvxl2012/12/27 00:39ANgJ3K <a href="http://wewxegprssdv.com/">wewxegprssdv</a>