弱頭部正規形
Weak Head Normal Form, WHNF
1番外側のconstructorまたはラムダ抽象まで評価したもの
完全な正規形まで簡約されていない、簡約途中な状態
簡約途中な項も(広義の)正規形とみなすことで、必要以上に簡約しないで済む
正規形 $ \sub弱頭部正規形
任意の正規形は弱頭部正規形である
Simon Peyton Jonesが作った言葉らしい ref
seq関数を使うことで弱頭部正規形まで評価できる
例
(1 + 1, 2 + 2)
1番外側は(,)
内部の1+1などは正規形でなくて良い
\x -> 2 + 2
一番外側はラムダ抽象
内部の2+2は正規形でなくて良い
'h' : ("e" ++ "llo")
一番外側は(:)
内部の"e"++"llo"は正規形でなくて良い
2
正規形なものは弱頭部正規形でもある
弱頭部正規形でない例
1 + 2
一番外側の関数適用(+)が、簡約されていない
(\x -> x + 1) 2
一番外側の関数適用(\x -> x + 1) _が、簡約されていない
"he" ++ "llo"
一番外側の関数適用(++)が、簡約されていない
https://gyazo.com/7edb12bf057e271b25e8cfe70129cb2f https://en.wikibooks.org/wiki/Haskell/Laziness#Thunks_and_Weak_head_normal_form
参考
haskell - What is Weak Head Normal Form? - Stack Overflow
https://en.wikibooks.org/wiki/Haskell/Graph_reduction#Weak_Head_Normal_Form
(redexは簡約項のこと)
https://en.wikibooks.org/wiki/Haskell/Laziness#Thunks_and_Weak_head_normal_form