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

@uents blog

Code wins arguments.

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 遅延評価の解釈系」から。


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