SICP

半年くらい前に3章の途中まで読んでそのままほったらかしだったSICPの続きを読んだ。
記憶がおぼろげだが、確か、オブジェクト指向的なプログラミングをしようとしたら局所変数に代入するという機能が必要になって、代入を使うと完全な関数型プログラムではなくなってしまった。つまり、同じ引数を与えて同じ手続きを呼んでも同じ値が返ってくるとは限らないプログラムになってしまったのだった。その複雑さについていろいろ解説されていたというところまでが既読。

今日読んだのはその続きで、その複雑さの解決方法としてストリームという発想が出てきた。これは局所変数の値の変化の履歴をリストとして持つというデータ構造です。でも将来どんな値になるのかなんてわかんないからそこは遅延評価を使う。
例えば、ある局所変数sの値が、1→2→3と変化する場合、sの初期状態は
(1 . #)
これのcdrは
(2 . #
さらにこれのcdrは
(3 . #)
というふうに動作する。

ストリームの基本的な説明の後は、ストリームを組み合わせることで新たなストリームを生成するという話の流れだった。なんかコマンドラインでパイプつないでるみたいな感覚で楽しかった。もしかしてこれがモナOSが進む世界なのか!?