正格評価
strict evaluation
積極評価
、
先行評価
、
eager evaluation
関数呼び出しの際に、bodyより先に引数を評価する
関数の引数が本体で使われるかどうかに関係なく常に評価される
最悪時データ構造
は書けるが、
償却データ構造
は書けない
Haskellでは
$
の代わりに、
$!
を使えば正格評価になる
e.g. 以下のような関数
two
を考える
code:hs
two = const 2
two $! undefined
とすれば、結果は
undefined
になる
Haskellは、
$!
を使っても
弱頭部正規形
を使うので、
take 5 $! [1..]
はちゃんと停止する
ref
https://haskell.e-bigmoon.com/posts/2018/06-25-all-about-strictness