関数型プログラミング言語Haskell Part8
■ このスレッドは過去ログ倉庫に格納されています
0482デフォルトの名無しさん
2008/01/30(水) 16:52:05処理系と最適化オプションに依る
素朴な遅延評価だと前者
sum [0..100000]
==> foldl (+) 0 [0..100000]
==> foldl (+) 0 (0:[0+1..100000])
==> foldl (+) (0+0) [0+1..100000]
==> foldl (+) (0+0) (1:[1+1..100000])
==> foldl (+) (0+0+1) [1+1..100000]
…
==> foldl (+) (0+0+1+2+...+100000) []
==> 0+0+1+2+...+100000
…
だけど、例えばghc-6.8.2で-O2だと、Integer用に特殊化されたsumの実装が使われて、
foldlの蓄積引数が積極評価されるので後者になる
■ このスレッドは過去ログ倉庫に格納されています