さかもとのブログ

つらつらと

演習問題4.18

変換前

(define (solve f y0 dt)
  (define y (integral (delay dy) y0 dt))
  (define dy (stream-map f y))
  y)

変換後

(define (solve f y0 dt)
  (let ((y '*unassigned*)
        (dt '*unassigned))
    (let ((a (integral (delay dy) y0 dt))
          (b (stream-map f y)))
      (set! y a)
      (set! dy b)
      y)))

これは動かない(はず).2つ目のlet式でaを束縛するとき,(integral (delay dy) y0 dt))の評価が行われるが,この時点ではdtは'*unassigned* なので.