kinaba
@kinaba
http://bit.ly/dtpDca ううむ、複雑に考えすぎではないでしょうか…。fib=1:1:... は単にリストを作って変数fibに持っている式なので、素直に動かすと全リストが保持されます。たまたま1回しか使わないならば残す必要がないので最適化で消えるだけで。
2010-06-23 23:15:37
kinaba
@kinaba
最適化でじゃなくてこの場合はGCでかな。どっちだろう。!!とzipWithが融合されて消えているのか、GCで適宜回収されているのかどっちか。
2010-06-23 23:23:42
kinaba
@kinaba
+の引数の計算ではなく、+の計算自体を正格評価しないと変わらないので、遅延をやめるならば zipWith' f (x:xs) (y:ys) = ((:) $! (f x y)) (zipWith' f .. http://togetter.com/li/31078
2010-06-23 13:23:26
kinaba
@kinaba
遅延評価だと(正格評価のつもりでいると予想しないところでメモリを食う、ので、メモリを食うとGCの影響やメモリ階層の影響がフクザツなので)実行時間が読みづらい、というのはあると思う。けど、実行される演算の回数は、必要な演算は結局最後には全部呼ばれるので、深く考えず普通に数えればok
2010-06-23 23:37:08