一汁三菜

自分が楽しいと思うこと、マラソン、旅行、その他日々の記録をしたい。

第5章 遅延評価

ようやく第2部。この第5章は1回読んだ後では「長い」と思ったけど、2回目に読んだ時にはそれほど長いとは思わなかった。要するに、遅延評価のシミュレーションで紙面を多く割いているのが長さを感じさせる原因だったらしい。ただ、別にこれが悪いというわけじゃなくて、逆に丁寧に説明してくれていてとてもありがたい。
本章でまず出てきたのが「置き換えモデル」(substitution model)、「簡約」(reduction)。SICPを読んでいた時には具体的なイメージがつかみづらかったけど、ここの説明を読んであっさりと納得。やはり母国語最強。

置き換えモデル
簡約のやり方。
簡約
関数の適用を定義に置き換える事。λ計算で言うところの、β縮約に対応するのかな?

で、Haskellの置き換えモデルは

最外簡約
もっとも外側のかたまりから簡約されていく。
グラフ簡約
簡約途中に同じ要素群が出てきた時には、1度の評価にまとめる。

で、かつ

  • パターンマッチ
  • 組み込み演算(関数?)

が行われる時に、初めて簡約される。
プログラムを見た時に、簡約の順番を割と間違えそうになるので、この辺りはきちんと覚えておかなければ。