λ. 正格性解析 (Strictness Analysis) この記事はHaskell Advent Calendarのために書かれたものです。(22日目) 正格性解析(strictness analysis)は、Haskellのような遅延評価を行う純粋関数型言語での最も基本的な最適化のひとつの割に、あまり知られていないようなので、簡単に紹介してみることに。 動機 よくある例だけど、末尾再帰で書かれた sum' :: Int → [Int] → Int sum' s [] = s sum' s (x:xs) = sum' (s+x) xs というプログラムは、Haskellでは最適化が行われない限り悲惨なことになる。 sum' 0 [1,2,3,4] を計算すると、sum' 0 [1,2,3] ⇒ sum' (0+1) [2,3] ⇒ sum' ((0+1)+2) [3] ⇒ sum' (