読者です 読者をやめる 読者になる 読者になる

@uents blog

Code wins arguments.

SICP 読書ノート#57 - 4.2.3 遅延評価リストとしてのストリーム (pp.243-245)

Scheme SICP

遅延評価器では手続きの引数が全て遅延されるので、consセルをcompound procedureとして定義すれば、リストとストリームは同義となる。

consの手続きは§2でも出たあれだ。

(define (cons first rest)
  (lambda (pair) (pair first rest)))

(define (car pair)
  (pair (lambda (f r) f)))

(define (cdr pair)
  (pair (lambda (f r) r)))

§3のストリームは遅延されるのはcdrだけだったのに対し、この遅延リストはcarもcdrも同様に遅延ができる。これを「遅延度が高い」と言うらしい。

問題 4.32

この遅延度の高さのおかげで未定義の対が定義できる。

;;; L-Eval input:
(define a-stream (cons x y)) ;; x,yは未定義の変数

;;; L-Eval value:
ok

;;; L-Eval input:
a-stream

;;; L-Eval value:
(compound-procedure (pair) ((pair first rest)) <procedure-env>)

§3のストリームだとxが未定義でエラーするはず。

問題 4.33-34

あまり興味が惹かれないでパスします。

次回は「§4.3 Schemeの変形---非決定性計算」から。


※「SICP読書ノート」の目次はこちら