プログラミング Haskell 第12章 遅延評価 その1

プログラミングHaskell

プログラミングHaskell

今日から第12章に入ります。遅延評価という Haskell の特徴的な性質の話題です。

  • 簡約(関数の適用)をどの順番でやるかという話
    • 最内簡約(値渡し) - 最も内側の、それ以上簡約できない引数のみもつ関数を簡約する(同じレベルが複数あったら左から)
    • 最外簡約(名前渡し) - 最も外側の関数から簡約する
  • 正格な関数 - 組込みの演算子のように、引数が既に値にまで簡約されていないと適用できない関数。この時は先に引数が簡約される
  • ラムダの中身は簡約しない。あくまでその関数を適用して置き換えた後で簡約される。つまりラムダ式の本体の中に簡約可能な式があっても、ラムダ式自体は評価済みとして扱かわれる
  • 停止性の話。要は最外簡約で必要なところだけ関数を適用するので無限リストなどの構造が使える
  • グラフ簡約の話。ふつケルではグラフ簡約という名前が出てきていましたが本書ではポインターを使って式を共有するという表現がされています。多分同じことでしょう
    • グラフ簡約を使えば値渡しより名前渡しで簡約回数が増えることはない
  • ポインターによる共有(グラフ簡約)と名前渡し(最外簡約)の両方の性質をもつ評価戦略を「遅延評価」と呼ぶ

このあたりはふつケルにも説明があった範囲ですね。ただ語彙がより明確にされているような気がします。