2004-11-01 [長年日記]
λ. Re: 正格性解析
sum' = foldl (+) 0 がIntやIだと余計なメモリを食わず、Integerだと余計なメモリを食ってしまう理由ですが、原因はfoldlがインライン展開されるかどうかの違いですね(GHC 6.2.1 で確認)。IntやIだとfoldlがインライン展開されて、(+)の正格性に基づいた最適化がされてます。それにしても、なんでIntegerだとfoldlがインライン展開されないんだろう……
それはそうと、以下の3つの型は領域(domain)が同型なので、add (I x) (I y) = I (x + y) とかは(少なくとも理論的には)無意味だと思います。
data I = I !Integernewtype I = I IntegerInteger
[追記] あうぅ。領域が同型であっても、newtypeとdataではパターンマッチの方のセマンティクスが違うのを忘れてました(Haskellはややこしいなぁ)。(+)がもし仮に非正格でも、この方法で定義したaddは正格になるので、意味はありますね。すんまそん。
λ. 風邪
先週末から少し調子悪いなと思ってたら、風邪をひいてしまった。今日が慶早戦による休講で助かった。
[ツッコミを入れる]
