SICP 読書ノート#55 - 4.2.1 正規順序と作用的順序 (pp.237-238)
「§4.2 Schemeの変形---遅延評価」から。
§4.1の超循環評価器に遅延評価を組み込んでいきます。
正規順序と作用的順序
よくごっちゃになるので整理。
- 作用的順序 (applicative order)
- 手続きを作用させるときに、引数をすべて評価する
- この手続きは引数に対してstrictともいう
- われわれが普段用いている処理系はコレ
- 正規順序 (normal order)
- 手続きを作用させるときに、実際に引数の値が必要になるため評価を遅らせる
- 言い換えれば、引数が評価される前に、手続きの本体に入る
- この手続は引数に対してnon-strictともいう
- 引数の評価を遅らせる手法として、遅延評価 (lazy evaluation) を用いる
問題 4.25
unlessは手続きで実装されているので…
- 作用的順序では、unlessの引数が先に評価されてしまい上手く動かない
- usual-value exceptional-value の両方とも評価されてしまう
- 正規順序では、上手く動くと思う
問題 4.26
有用な状況として、unlessが手続きだと高階関数として使うことができる。
次の章は大変なので、短いけどここで切ります。次回は「§4.2.2 遅延評価の解釈系」から。